亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unit1.~pas

?? 插值計(jì)算--計(jì)算方法_delphi.rar 計(jì)算方法課程上機(jī)作業(yè)
?? ~PAS
?? 第 1 頁 / 共 2 頁
字號:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, ComCtrls, ExtCtrls, Mask, Menus;
////////////////////////////////////////////////////////////////////////////////////
// y=sin(x)
const
  PN                = 100;
const
  N                 = 11;
const
  X                 : array[1..N] of double = (-5, -4, -3, -2, -1, 0,
    1, 2, 3, 4, 5);
const
  Y                 : array[1..N] of double = (0.038462, 0.058824, 0.100000, 0.200000, 0.500000, 1.000000, 0.500000, 0.200000, 0.100000, 0.058824, 0.038462);
  ////////////////////////////////////////////////////////////////////////////////////
           {
    ////////////////////////////////////////////////////////////////////////////////////
  // y=1/(1+x^2)
  //區(qū)間為:[-5,5]
  const PN=100;
  const N=11; //節(jié)點(diǎn)
  const X:array[1..N] of double=(-5,-4,-3,-2,-1,0,1,2,3,4,5);
  const Y:array[1..N] of double=();
  ////////////////////////////////////////////////////////////////////////////////////
      }
type
  TForm_main = class(TForm)
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    Panel2: TPanel;
    PaintBox1: TPaintBox;
    Panel3: TPanel;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    GroupBox2: TGroupBox;
    StringGrid1: TStringGrid;
    Edit_x: TEdit;
    Edit_num: TEdit;
    UpDown1: TUpDown;
    Label3: TLabel;
    Label2: TLabel;
    Label1: TLabel;
    Edit_y: TEdit;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Button1: TButton;
    Memo1: TMemo;
    GroupBox3: TGroupBox;
    Button2: TButton;
    Button_testpic: TButton;
    Button_reset: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; Xp,
      Yp: Integer);
    procedure Button_resetClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
  //  procedure Button_testClick(Sender: TObject);
    procedure Button_testpicClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    function Lagrange(xi: double; dim: integer): double;
    function Newton(xi: double; dim: integer): double;
    function coordinate_pos(): integer;
    function determine_start_point(x_i: double; dimen: integer): integer;
    function Split(xi: double): double;
    function Cut_linear(xi: double): double;
    procedure PaintFrame();
  public
    paint_num: integer;                 //畫圖的次數(shù),以此標(biāo)志不同的顏色
    points: array[1..100, 1..3] of real;
  end;

var
  Form_main         : TForm_main;

implementation

uses Unit_func, Unit_func100;

{$R *.dfm}
//------------------------------------------------------------------------------

function TForm_main.Cut_linear(xi: double): double; //分段線性插值
var
  i, j              : integer;
  L                 : array[1..N] of double;
begin
  if (xi >= X[1]) and (xi <= X[2]) then
    L[1] := (xi - X[2]) / (X[1] - X[2])
  else
    L[1] := 0;

  for i := 2 to N - 1 do
  begin
    if (X[i - 1] <= xi) and (xi <= X[i]) then
      L[i] := (xi - X[i - 1]) / (X[i] - X[i - 1])
    else
      if (X[i] <= xi) and (xi <= X[i + 1]) then
        L[i] := (xi - X[i + 1]) / (X[i] - X[i + 1])
      else
        L[i] := 0;
  end;

  if (X[N - 1] <= xi) and (xi <= X[N]) then
    L[N] := (xi - X[N - 1]) / (X[N] - X[N - 1])
  else
    L[N] := 0;

  result := 0;
  for j := 1 to N do
    result := result + L[j] * Y[j];

  Cut_linear := result;
end;

//------------------------------------------------------------------------------

function TForm_main.Split(xi: double): double; //三次樣條插值函數(shù)
var
  i, j, k           : integer;
  a_                : array[1..N] of double;
  b_                : array[1..N] of double;
  h                 : array[1..N - 1] of double;
  A                 : array[1..N] of double;
  B                 : array[1..N] of double;
  m                 : array[1..N] of double;
  s                 : double;
begin
  for i := 1 to N - 1 do
  begin
    h[i] := X[i + 1] - X[i];
  end;

  for i := 2 to N - 1 do
  begin
    a_[i] := h[i - 1] / ((h[i - 1] + h[i]));
    b_[i] := 3 * ((1 - a_[i]) * (Y[i] - Y[i - 1]) / h[i - 1] + a_[i] * (Y[i + 1]
      - Y[i]) / h[i]);
  end;

  //-----------------------以下方程假設(shè)滿足第二類邊界條件----------------------
  a_[1] := 1;
  a_[N] := 0;
  b_[1] := 3 * (Y[2] - Y[1]) / h[1];
  b_[N] := 3 * (Y[N] - Y[N - 1]) / h[N - 1];
  //---------------------------------------------------------------------------

  A[1] := -a_[1] / 2;
  B[1] := b_[1] / 2;

  for j := 2 to N - 1 do
  begin
    A[j] := -a_[j] / (2 + (1 - a_[j]) * A[j - 1]);
    B[j] := (b_[j] - (1 - a_[j]) * B[j - 1]) / (2 + (1 - a_[j]) * A[j - 1]);
  end;

  //追趕法解線性方程
  m[N] := (b_[N] - (1 - a_[N]) * B[N - 1]) / (2 + (1 - a_[N]) * A[N - 1]);
  for i := N - 1 downto 1 do
  begin
    m[i] := A[i] * m[i + 1] + B[i];
  end;

  i := 1;
  while xi > X[i] do
  begin
    inc(i);
  end;

  i := i - 1;

  //------構(gòu)造( X[i],X[i+1] )區(qū)間上的三次樣條插值函數(shù)--------------------------------------------------
  s := (1 + 2 * (xi - X[i]) / (X[i + 1] - X[i])) * ((xi - X[i + 1]) / (X[i] - X[i
    + 1])) * (xi - X[i + 1]) / (X[i] - X[i + 1]) * Y[i]
    + (1 + 2 * (xi - X[i + 1]) / (X[i] - X[i + 1])) * ((xi - X[i]) / (X[i + 1] -
    X[i])) * (xi - X[i]) / (X[i + 1] - X[i]) * Y[i + 1]
    + (xi - X[i]) * ((xi - X[i + 1]) / (X[i] - X[i + 1])) * ((xi - X[i + 1]) /
    (X[i] - X[i + 1])) * m[i]
    + (xi - X[i + 1]) * ((xi - X[i]) / (X[i + 1] - X[i])) * ((xi - X[i]) / (X[i
    + 1] - X[i])) * m[i + 1];
  Split := s;
end;
//------------------------------------------------------------------------------

function TForm_main.determine_start_point(x_i: double; dimen: integer): integer;
var
  i, start_point    : integer;
begin                                   //判斷插值節(jié)點(diǎn), 待優(yōu)化改進(jìn)
  for i := 1 to N do
  begin
    if ((X[i] <= x_i) and (X[i + 1] >= x_i)) then
    begin
      if ((dimen mod 2) = 0) then
      begin
        start_point := i - Trunc(((dimen - 2) / 2));
      end
      else
      begin                             //判斷離xi最近的節(jié)點(diǎn)
        if (abs((x_i - X[i])) < abs((x_i - X[i + 1]))) then //離i節(jié)點(diǎn)更近
          start_point := i - Trunc((dimen - 2) / 2) - 1
        else                            //離i+1節(jié)點(diǎn)更近
          start_point := i - Trunc((dimen - 2) / 2);
      end;
      break;
    end;
  end;
  if (start_point <= 0) then
    start_point := 1;
  determine_start_point := start_point;
end;
//------------------------------------------------------------------------------

//--------------------------------NewTon插值函數(shù)--------------------------------

function TForm_main.Newton(xi: double; dim: integer): double;
var
  i_start, i_start_point, i, j, k: integer;
  op_matrix         : array of array of double; //N行,N+1列數(shù)組,x,fx,df1,df2,df3...
  sum_i, muti       : double;
begin
  i_start := self.determine_start_point(xi, dim); //自動判斷插值節(jié)點(diǎn)
  i_start_point := i_start;
  SetLength(op_matrix, dim);            //設(shè)置行數(shù):N
  for i := 0 to dim - 1 do
  begin
    SetLength(op_matrix[i], dim + 1);   //設(shè)置列數(shù):N+1
    op_matrix[i, 0] := X[i_start];      //填充第一列為Xi
    op_matrix[i, 1] := Y[i_start];
    inc(i_start);                       //填充第二列為Yi
  end;
  //------------------------對N*(N+1)維矩進(jìn)行運(yùn)算,求各階均差---------------
  for i := 2 to dim do                  //i表示列號
  begin
    k := 0;
    for j := i - 1 to dim - 1 do        //j表示行號
    begin
      op_matrix[j, i] := (op_matrix[j, i - 1] - op_matrix[j - 1, i - 1]) /
        (op_matrix[j, 0] - op_matrix[K, 0]); //計(jì)算均差
      inc(K);
    end;
  end;
  sum_i := 0;
  for j := 1 to dim - 1 do
  begin
    muti := 1;
    for k := 0 to j - 1 do
    begin
      muti := muti * (xi - X[i_start_point + k]);
      //X數(shù)組下標(biāo)是從1開始的,第一個數(shù)是X[1]
    end;
    sum_i := sum_i + muti * op_matrix[j, j + 1];
  end;

  sum_i := sum_i + Y[i_start_point];

  Newton := sum_i;
end;
//------------------------------------------------------------------------------

//-------------------------------Lagrange插值函數(shù)-------------------------------

function TForm_main.Lagrange(xi: double; dim: integer): double;
var
  i, j, nearest_point, i_start, i_over: integer;
  fx, fxi, t        : double;
begin
  fx := 0;
  i_start := self.determine_start_point(xi, dim); //自動選擇插上值節(jié)點(diǎn)
  i_over := i_start + dim - 1;
  for i := i_start to i_over do         //構(gòu)造Lagrange插值多項(xiàng)式
  begin
    t := 1;
    for j := i_start to i_over do
    begin
      if (j <> i) then t := t * (xi - X[j]) / (X[i] - X[j]);
    end;
    fxi := Y[i] * t;
    fx := fx + fxi;
  end;
  Lagrange := fx;                       //返回函數(shù)值
end;

//-------------------------------顯示數(shù)據(jù)---------------------------------------//

procedure TForm_main.FormCreate(Sender: TObject);
var
  i                 : integer;
begin
  paint_num := 0;
  self.StringGrid1.RowCount := N + 1;
  StringGrid1.Cells[0, 0] := 'X';
  StringGrid1.Cells[1, 0] := 'Y';
  for i := 1 to N do
  begin
    self.StringGrid1.Cells[0, i] := floattostr(X[i]);
    self.StringGrid1.Cells[1, i] := floattostr(Y[i]);
  end;
   // fun100(1.1, 2.2, 3);                //計(jì)算數(shù)據(jù)

end;
//-------------------------------------------------------------------------------

procedure TForm_main.Button1Click(Sender: TObject);
var
  xi, yi            : double;
  times             : integer;
begin
//{
  times := Trunc(strtofloat(self.Edit_num.Text));
  if self.Edit_x.Text = '' then
  begin
    MessageDlg('請輸入插值點(diǎn)的值!', mtInformation, [mbOk], 0);
    self.Edit_x.SetFocus;
  end
  else
    if (X[1] > strtofloat(self.Edit_x.Text)) or (strtofloat(self.Edit_x.Text) >
      X[N]) then
    begin
      MessageDlg('插值節(jié)點(diǎn)無效,請重新輸入!', mtInformation, [mbOk], 0);
      self.Edit_x.SetFocus;
      Self.Edit_x.Text := '';
    end
    else
      if times + 1 > N then
      begin
        MessageDlg('插值次數(shù)大于節(jié)點(diǎn)數(shù),不能運(yùn)算!', mtInformation, [mbOk], 0);
        self.Edit_x.Text := '';
        self.Edit_x.SetFocus;
      end
      else
      begin
        xi := strtofloat(self.Edit_x.text);
        if self.RadioButton1.Checked then
          yi := self.Lagrange(xi, times + 1) //調(diào)用Lagrange插值函數(shù)
        else
          if self.RadioButton2.Checked then
            yi := self.Newton(xi, times + 1) //調(diào)用Newton插值函數(shù)
          else
            if self.RadioButton3.Checked then
              yi := self.Split(xi)      //調(diào)用三次樣條插值
            else
              yi := self.Cut_linear(xi); //調(diào)用分段線性插值

        self.Edit_Y.Text := floattostr(yi);
      end;
     // }
end;

//--------------------------------------------------------------------------------

function TForm_main.coordinate_pos(): integer;
var
  i, j, flag_x, flag_y: integer;
begin
  //----------------------------判斷X,Y數(shù)組中是否有同號,方便軸------------------------------
  flag_x := 0;                          //flag=0時表示X或Y數(shù)組中的值均為同號, 否則flag=1表示為異號
  flag_y := 0;
  for i := 2 to N do
    if (X[1] * X[i] < 0) then
      flag_x := 1;
  if (Y[1] * Y[i] < 0) then
    flag_y := 1;

end;

//----------------------------------------------------------------------------------

procedure TForm_main.PaintFrame();
var
  i, j, x_df, y_df, xi, yi, i_height, co_margin: integer;
  yh, xw            : integer;
  sw                : integer;
  margin, x0, y0    : integer;
  dy, dx            : double;
  t, max, min, X_range, Y_range, unit_x_range, unit_y_range: double;
  x_string_width, y_string_width, y_string_height: integer;
  x_string, y_string: string;
  tempy             : real;             //對Y的值進(jìn)行處理
begin
  Y_range := 0;
  self.PaintBox1.Canvas.Pen.Color := clWhite;

  margin := 50;                         //設(shè)置邊距

  yh := self.PaintBox1.Height - 2 * margin;
  xw := self.PaintBox1.Width - 2 * margin;
  x0 := margin;
  y0 := margin + yh;

  //畫邊框
  self.PaintBox1.Canvas.MoveTo(margin, margin);
  self.PaintBox1.Canvas.LineTo(margin, yh + margin);
  self.PaintBox1.Canvas.LineTo(xw + margin, yh + margin);
  self.PaintBox1.Canvas.LineTo(xw + margin, margin);
  self.PaintBox1.Canvas.LineTo(margin, margin);

  //畫坐標(biāo)
  X_range := X[N] - X[1];
  max := Y[1];
  min := Y[1];
  for i := 2 to N do
  begin
    if Y[i] >= max then
      max := Y[i];
    if Y[i] <= min then
      min := Y[i];
  end;
  Y_range := 0;
  Y_range := max - min;

  x_df := N - 1;                        //X坐標(biāo)等分單元格數(shù)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜精品影院观看视频 | 亚洲欧美韩国综合色| 亚洲免费观看高清完整版在线观看| 亚洲精品伦理在线| 蜜臀av一级做a爰片久久| 国产精品原创巨作av| 色妹子一区二区| 日韩亚洲欧美在线| 中文字幕一区二区三区在线不卡 | 欧美福利视频导航| 欧美精品一区二区三区高清aⅴ| 中文字幕一区在线| 免费看黄色91| 91免费观看国产| 日韩欧美一区二区不卡| 亚洲欧美经典视频| 经典一区二区三区| 在线观看亚洲精品| 久久精品免视看| 亚洲国产综合色| 成人自拍视频在线| 7777精品伊人久久久大香线蕉经典版下载 | 欧美群妇大交群中文字幕| 久久久av毛片精品| 午夜一区二区三区视频| 懂色av一区二区三区免费观看| 欧美日本一区二区| 成人欧美一区二区三区在线播放| 蜜臀久久久99精品久久久久久| 97精品超碰一区二区三区| 欧美电影免费观看高清完整版在| 亚洲视频免费在线观看| 国内一区二区视频| 欧美日韩午夜精品| 中文字幕一区二区三区精华液 | 久久嫩草精品久久久久| 亚洲一二三四久久| proumb性欧美在线观看| 日韩午夜av电影| 亚洲国产精品久久艾草纯爱| 国产成人午夜电影网| 日韩欧美不卡一区| 亚洲成人资源在线| 色综合久久综合网97色综合| 国产精品无人区| 国产综合一区二区| 欧美不卡一二三| 日韩成人免费看| 欧美三级乱人伦电影| 亚洲精品网站在线观看| 成人午夜电影久久影院| 精品处破学生在线二十三| 日韩高清不卡在线| 91网站在线观看视频| 国产欧美日韩在线| 激情综合一区二区三区| 日韩一区二区三区在线视频| 亚洲成人免费观看| 欧美在线视频日韩| 亚洲精品成人悠悠色影视| 91视频国产资源| 亚洲欧洲成人精品av97| 成人免费高清视频| 欧美国产1区2区| 岛国精品在线观看| 国产欧美日韩麻豆91| 国产91丝袜在线播放0| 久久久另类综合| 国产一区二区三区国产| 久久精品人人做人人综合 | 欧美韩国日本一区| 国产福利一区二区三区| 国产色婷婷亚洲99精品小说| 国内偷窥港台综合视频在线播放| 精品黑人一区二区三区久久| 九九热在线视频观看这里只有精品 | 亚洲一区在线看| 欧美图区在线视频| 丝瓜av网站精品一区二区| 欧美人狂配大交3d怪物一区| 日产欧产美韩系列久久99| 51精品视频一区二区三区| 日本不卡1234视频| 久久蜜桃av一区精品变态类天堂 | 国产女主播一区| 成人黄页毛片网站| 国产精品国产三级国产有无不卡| 91欧美一区二区| 亚洲成人在线免费| 欧美一级片在线| 久久99国内精品| 欧美激情一区三区| 91一区一区三区| 亚洲mv在线观看| 日韩一区二区在线看| 国产成人精品一区二区三区网站观看| 国产欧美久久久精品影院| 99精品国产99久久久久久白柏| 亚洲高清中文字幕| 精品处破学生在线二十三| 成人97人人超碰人人99| 亚洲影院在线观看| 日韩欧美亚洲一区二区| 国产一区二区精品久久| 亚洲视频1区2区| 欧美一区二区视频在线观看2020| 久草在线在线精品观看| 国产精品视频麻豆| 91国产丝袜在线播放| 日韩av电影免费观看高清完整版在线观看| 久久色在线视频| 色欧美日韩亚洲| 久久不见久久见免费视频1| 国产精品私房写真福利视频| 欧美日韩的一区二区| 国产精品2024| 亚洲午夜激情网站| 久久在线免费观看| 色欧美片视频在线观看在线视频| 美女视频网站久久| 综合欧美亚洲日本| 日韩一二三区不卡| 91亚洲永久精品| 捆绑紧缚一区二区三区视频| 国产精品久久久久婷婷二区次| 欧美日韩不卡在线| 国产一区二区导航在线播放| 亚洲国产精品尤物yw在线观看| 欧美精品一区二区久久婷婷| 91久久香蕉国产日韩欧美9色| 看电影不卡的网站| 一区二区三区波多野结衣在线观看 | 亚洲五码中文字幕| 精品国产一区二区三区久久影院 | 亚洲成av人片一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美在线free| 国产suv精品一区二区883| 亚洲午夜成aⅴ人片| 中文字幕免费观看一区| 91精品国产高清一区二区三区蜜臀| 成人黄色国产精品网站大全在线免费观看 | 国产91丝袜在线播放九色| 日韩经典中文字幕一区| 国产精品九色蝌蚪自拍| 久久这里只有精品首页| 欧美喷水一区二区| 色综合咪咪久久| 福利电影一区二区| 国内精品免费在线观看| 午夜视频一区二区| 一区二区三区欧美日| 日本一区二区三区四区在线视频| 欧美一区二区三区白人| 欧美自拍丝袜亚洲| 成人少妇影院yyyy| 国产一区二区久久| 极品少妇一区二区三区精品视频| 首页亚洲欧美制服丝腿| 一区二区在线观看视频| 国产精品久久久久久久久久免费看 | 亚洲狼人国产精品| 中文字幕精品综合| 久久蜜臀中文字幕| 亚洲精品一区二区三区99| 欧美日本在线一区| 欧美日韩久久不卡| 欧美亚洲愉拍一区二区| 99久久免费精品高清特色大片| 国模少妇一区二区三区| 裸体健美xxxx欧美裸体表演| 天天影视网天天综合色在线播放 | 91.com在线观看| 欧美日韩二区三区| 欧美三级韩国三级日本三斤| 在线观看www91| 欧美日韩一区二区不卡| 日本久久一区二区三区| 一本大道久久a久久综合婷婷| 99久久伊人久久99| 91美女在线观看| 一本色道久久加勒比精品| 日本道在线观看一区二区| 日本高清无吗v一区| 色婷婷综合久久久中文一区二区 | 亚洲最大的成人av| 亚洲一区二区av电影| 夜夜操天天操亚洲| 香蕉影视欧美成人| 人人精品人人爱| 狠狠色丁香婷婷综合久久片| 久久99精品久久久久| 国产裸体歌舞团一区二区| 国产精品资源网| a级高清视频欧美日韩| 色综合天天综合狠狠| 欧美性感一类影片在线播放| 欧美美女一区二区在线观看| 欧美日本视频在线| 精品国产免费视频|