當前位置:編程學習大全網 - 編程語言 - 數值方法編程題,用c語言或者matlab都行,高手幫幫忙。。。程序越詳細越好。謝謝了~

數值方法編程題,用c語言或者matlab都行,高手幫幫忙。。。程序越詳細越好。謝謝了~

(1)n個節點lagrange插值多項式程序

function yy=lagrange(x1,y1,xx)

%本程序為Lagrange1插值,其中x1,y1

%為插值節點和節點上的函數值,輸出為插值點xx的函數值,

%xx可以是向量。

syms x

n=length(x1);

for i=1:n

t=x1;t(i)=[];L(i)=prod((x-t)./(x1(i)-t));% L向量用來存放插值基函數

end

u=sum(L.*y1);

p=simplify(u) % p是簡化後的Lagrange插值函數(字符串)

yy=subs(p,x,xx);

clf

plot(x1,y1,'ro',xx,yy,'*')

========

命令窗口命令及結果

format long g

>> lagrange([11 12],[0.190809 0.207912],11.5)

p =

(616200515415341*x)/36028797018963968 + 96413060822745/36028797018963968

ans =

0.1993605

>> lagrange([11 12 13],[0.190809 0.207912 0.224951],11.5)

p =

- (1152921504607*x^2)/36028797018963968 + (321358855010651*x)/18014398509481984 - 55772577785379/36028797018963968

ans =

0.1993685

>> sin(11.5*pi/180)

ans = 0.199367934417197

(2)

function f = Newton(x,y,x0)

%本程序為Newton插值,其中x,y

%為插值節點和節點上的函數值,輸出為插值點x0的函數值,

%x0可以是向量。

syms t;

if(length(x) == length(y))

n = length(x);

c(1:n) = 0.0;

else

disp('x和y的維數不相等!');

return;

end

f = y(1);

y1 = 0;

l = 1;

for(i=1:n-1)

for(j=i+1:n)

y1(j) = (y(j)-y(i))/(x(j)-x(i));

end

c(i) = y1(i+1);

l = l*(t-x(i));

f = f + c(i)*l;

simplify(f)

y = y1;

if(i==n-1)

if(nargin == 3)

f = subs(f,'t',x0);

else

f = collect(f); %將插值多項式展開

f = vpa(f, 6);

end

end

end

==========

fn=Newton([11 12],[0.190809 0.207912],11.5)

ans =

(616200515415341*t)/36028797018963968 + 96413060822745/36028797018963968

fn =

0.1993605

>> fn=Newton([11 12 13],[0.190809 0.207912 0.224951],11.5)

ans =

(616200515415341*t)/36028797018963968 + 96413060822745/36028797018963968

ans =

- (1152921504607*t^2)/36028797018963968 + (321358855010651*t)/18014398509481984 - 55772577785379/36028797018963968

fn =

0.1993685

  • 上一篇:信息安全管理體系
  • 下一篇:數獨的計算公式是什麽
  • copyright 2024編程學習大全網