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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unit1.pas

?? 插值計算--計算方法_delphi.rar 計算方法課程上機作業
?? 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)
  //區間為:[-5,5]
  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=();
  ////////////////////////////////////////////////////////////////////////////////////
      }
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;                 //畫圖的次數,以此標志不同的顏色
    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; //三次樣條插值函數
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;

  //-----------------------以下方程假設滿足第二類邊界條件----------------------
  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;

  //------構造( X[i],X[i+1] )區間上的三次樣條插值函數--------------------------------------------------
  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                                   //判斷插值節點, 待優化改進
  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最近的節點
        if (abs((x_i - X[i])) < abs((x_i - X[i + 1]))) then //離i節點更近
          start_point := i - Trunc((dimen - 2) / 2) - 1
        else                            //離i+1節點更近
          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插值函數--------------------------------

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列數組,x,fx,df1,df2,df3...
  sum_i, muti       : double;
begin
  i_start := self.determine_start_point(xi, dim); //自動判斷插值節點
  i_start_point := i_start;
  SetLength(op_matrix, dim);            //設置行數:N
  for i := 0 to dim - 1 do
  begin
    SetLength(op_matrix[i], dim + 1);   //設置列數: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)維矩進行運算,求各階均差---------------
  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]); //計算均差
      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數組下標是從1開始的,第一個數是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插值函數-------------------------------

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); //自動選擇插上值節點
  i_over := i_start + dim - 1;
  for i := i_start to i_over do         //構造Lagrange插值多項式
  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;                       //返回函數值
end;

//-------------------------------顯示數據---------------------------------------//

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);                //計算數據

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('請輸入插值點的值!', 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('插值節點無效,請重新輸入!', mtInformation, [mbOk], 0);
      self.Edit_x.SetFocus;
      Self.Edit_x.Text := '';
    end
    else
      if times + 1 > N then
      begin
        MessageDlg('插值次數大于節點數,不能運算!', 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) //調用Lagrange插值函數
        else
          if self.RadioButton2.Checked then
            yi := self.Newton(xi, times + 1) //調用Newton插值函數
          else
            if self.RadioButton3.Checked then
              yi := self.Split(xi)      //調用三次樣條插值
            else
              yi := self.Cut_linear(xi); //調用分段線性插值

        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數組中是否有同號,方便軸------------------------------
  flag_x := 0;                          //flag=0時表示X或Y數組中的值均為同號, 否則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的值進行處理
begin
  Y_range := 0;
  self.PaintBox1.Canvas.Pen.Color := clWhite;

  margin := 50;                         //設置邊距

  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);

  //畫坐標
  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坐標等分單元格數

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡的av网站| 欧美偷拍一区二区| 亚洲色图色小说| 美女网站一区二区| 精品视频999| 亚洲大尺度视频在线观看| 色哟哟国产精品| 中文字幕一区二区三区精华液 | 久久久久久久综合| 日本美女一区二区三区| 777奇米四色成人影色区| 丝袜美腿亚洲一区| 欧美高清www午色夜在线视频| 天天射综合影视| 成人免费在线观看入口| 欧美久久高跟鞋激| 成人综合婷婷国产精品久久蜜臀 | 成人免费视频一区| 亚洲精品日产精品乱码不卡| 精品日韩欧美在线| 91麻豆免费在线观看| 免费美女久久99| 亚洲免费av高清| 国产清纯在线一区二区www| 欧美女孩性生活视频| www.久久精品| 岛国av在线一区| 久久超碰97人人做人人爱| 亚洲美女区一区| 中文字幕免费观看一区| 精品国产凹凸成av人网站| 欧美一区二区人人喊爽| 色诱视频网站一区| 国产盗摄女厕一区二区三区| 五月婷婷欧美视频| 三级成人在线视频| 香蕉成人伊视频在线观看| 性做久久久久久免费观看| 亚洲一区二区三区视频在线播放 | 成人综合婷婷国产精品久久蜜臀| 日本怡春院一区二区| 视频在线在亚洲| 麻豆精品一区二区三区| 精品综合久久久久久8888| 久久av老司机精品网站导航| 国产九色sp调教91| 一本一道久久a久久精品| 欧美在线你懂得| 欧美一级久久久| 国产精品网曝门| 午夜视频在线观看一区| 精品中文字幕一区二区| 99精品黄色片免费大全| 91精品婷婷国产综合久久| 久久久久久综合| 亚洲日本青草视频在线怡红院| 亚洲天堂网中文字| 久久99精品国产| 色婷婷av一区二区三区gif| 中文字幕的久久| 久久99热这里只有精品| 99久久99久久精品免费观看| 91麻豆精品国产| 亚洲三级电影网站| 一二三四区精品视频| 久久久久久一二三区| 天堂蜜桃一区二区三区| 9人人澡人人爽人人精品| 久久亚洲精品国产精品紫薇| 亚洲国产综合视频在线观看| 91丨porny丨最新| 国产精品蜜臀av| 成人黄色免费短视频| 精品日韩在线观看| 精品一区二区三区免费毛片爱| 在线一区二区三区做爰视频网站| 国产精品嫩草久久久久| 国产一二三精品| 久久久久国产精品麻豆| 国产毛片精品视频| 国产精品免费人成网站| av在线不卡电影| 亚洲综合一二区| 7777精品伊人久久久大香线蕉的 | 成人av集中营| 亚洲色欲色欲www| 在线精品视频一区二区| 亚洲高清免费观看| 精品日产卡一卡二卡麻豆| 国产成人av一区二区三区在线观看| 国产精品网站在线播放| 欧美午夜精品一区二区蜜桃| 日韩中文字幕麻豆| 国产精品理伦片| 91精品中文字幕一区二区三区| 九九国产精品视频| 亚洲乱码国产乱码精品精98午夜| 欧美性一区二区| 国产91精品一区二区麻豆亚洲| 国产精品午夜春色av| 欧美乱熟臀69xxxxxx| 福利一区二区在线| 免费在线观看一区二区三区| 国产精品动漫网站| 精品国产乱码久久久久久久| 91免费视频网址| 成人精品视频一区| 色欧美乱欧美15图片| 无码av免费一区二区三区试看 | 精品捆绑美女sm三区| 91免费精品国自产拍在线不卡| 久久成人羞羞网站| 亚洲成va人在线观看| 18涩涩午夜精品.www| 国产欧美日韩视频一区二区 | 精品视频1区2区| 欧美丝袜丝交足nylons图片| av网站免费线看精品| 成人免费高清视频在线观看| 精品一区二区免费视频| 久久99久久99| 精品一区二区三区视频| 国产一区日韩二区欧美三区| 日韩影视精彩在线| 免费在线观看日韩欧美| 免费成人在线网站| 国产在线看一区| 从欧美一区二区三区| 色综合一个色综合| 91社区在线播放| 日韩一级黄色大片| 国产精品色呦呦| 午夜视频在线观看一区二区| 肉色丝袜一区二区| 青青国产91久久久久久 | 国产在线精品一区二区不卡了| 国产v综合v亚洲欧| 欧美喷潮久久久xxxxx| 26uuu成人网一区二区三区| 国产精品色哟哟| 日韩av一区二区三区| 丰满少妇久久久久久久| 欧美三级日韩三级| 欧美精品一区男女天堂| 亚洲第一综合色| jlzzjlzz亚洲女人18| 日韩三级免费观看| 亚洲v日本v欧美v久久精品| 国内国产精品久久| 日韩欧美色综合网站| 亚洲国产综合人成综合网站| 97超碰欧美中文字幕| 精品三级av在线| 日韩成人一级片| 欧美中文字幕亚洲一区二区va在线| 久久精品视频网| 黄色精品一二区| 久久丝袜美腿综合| 久久精品免费观看| 在线成人高清不卡| 一区二区不卡在线播放| 欧美在线视频不卡| 亚洲高清在线精品| 欧美夫妻性生活| 91香蕉国产在线观看软件| 亚洲人成网站精品片在线观看| 成人午夜激情视频| 国产精品成人网| 欧美系列亚洲系列| 首页国产欧美日韩丝袜| 日韩一二三区视频| 国产精品99久久久久久久vr| 国产精品网站在线播放| 色噜噜久久综合| 日韩中文字幕一区二区三区| 欧美一区二区三区视频| 国产传媒日韩欧美成人| 国产精品的网站| 精品国产伦一区二区三区免费 | 亚洲欧美在线高清| 欧美军同video69gay| 成人av影视在线观看| 日韩成人dvd| 亚洲欧洲一区二区三区| 日韩精品一区二区三区蜜臀 | 高清不卡在线观看av| 亚洲成av人综合在线观看| 国产精品国产自产拍高清av王其| 欧美色老头old∨ideo| 成人99免费视频| 欧美三级电影在线看| 亚洲大片免费看| 日韩视频在线一区二区| 欧美午夜理伦三级在线观看| 国产不卡免费视频| 捆绑调教美女网站视频一区| 天天影视涩香欲综合网| 亚洲一区二区三区不卡国产欧美| 国产欧美视频一区二区三区| 日韩免费观看2025年上映的电影 |