数值分析这一步是怎么算的?

数值分析这一步是怎么算的?,第1张

数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。为计算数学的主体部分。数百年前,人类已经将数学应用在建筑、战争、会计,以及许多领域之上,最早的数学大约是西元前1800年巴比伦人泥板(Babylonian tablet )上的计算式子。例如所谓的勾股数(毕氏三滚陪晌元数),(3, 4, 5),是直角三角形的乱嫌三边长比,在巴比伦泥板上已经发现了开根号的近似值。 数值分析在传统上一直不断的在改进,因为像巴比伦人的近似值,至今仍然是近似值,即使用电脑计算也找不到最精确的值. 运用数值分析解决问题的过程:实际问题→数学模型→数值计算方法→程序设计→上机计算求出结果 数值分析这门学科有如下特点: 1·面向计算机 2·有可靠的理论分析 3·要有好的计算复杂性 4·要有数值实验 5.要对算法进行误差分析 主要内容:插值法,函数逼近,大锋曲线拟和,数值积分,数值微分,解线性方程组的直接方法,解线性方程组的迭代法,非线性方程求根,常微分方程的数值解法。

网上很多高手编的程序,随便找找就是。

找了一个,你看看。

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12479054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存