找了一个,你看看。
1.lu分解程序
function
[l,u,detA]
=
mylu(
a
)
%
该程式主斗饥宽空亮是对系数矩阵a进行LU分解,具体算法可参见数值分析.
n=size(a,2)
u=zeros(size(a))
l=eye(size(a))
u(1,:)=a(1,:)
l(2:end,1)=a(2:end,1)/a(1,1)
for
r=2:n
for
j=r:n
u(r,j)=a(r,j)-l(r,1:r-1)*u(1:r-1,j)
end
for
i=r+1:n
l(i,r)=(a(i,r)-l(i,1:r-1)*u(1:r-1,r))/肢胡u(r,r)
end
end
detA=det(a)
2.调用
>>
A=magic(4)
>>
[L,U,detA]=mylu(A)
L
=
1.0000
0
0
0
0.3125
1.0000
0
0
0.5625
0.5663
1.0000
0
0.2500
1.3012
-3.0000
1.0000
U
=
16.0000
2.0000
3.0000
13.0000
0
10.3750
9.0625
3.9375
0
0
-0.8193
2.4578
0
0
0
0
detA
=
0
>>
(1)n个节点lagrange插值多项式程序function yy=lagrange(x1,y1,xx)
%本程序为Lagrange1插值,其中x1,y1
%为插值节点和节点上的函数值,输出为插值点xx的函数值,
%xx可以是向量。
syms x
n=length(x1)
for i=1:n
t=x1t(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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)