计算方法常用计算编程.docx

上传人:b****8 文档编号:10942695 上传时间:2023-02-23 格式:DOCX 页数:51 大小:67.36KB
下载 相关 举报
计算方法常用计算编程.docx_第1页
第1页 / 共51页
计算方法常用计算编程.docx_第2页
第2页 / 共51页
计算方法常用计算编程.docx_第3页
第3页 / 共51页
计算方法常用计算编程.docx_第4页
第4页 / 共51页
计算方法常用计算编程.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

计算方法常用计算编程.docx

《计算方法常用计算编程.docx》由会员分享,可在线阅读,更多相关《计算方法常用计算编程.docx(51页珍藏版)》请在冰豆网上搜索。

计算方法常用计算编程.docx

计算方法常用计算编程

1.向量范数:

clear

x=input('输入一个向量\nx=')

x1=sum(abs(x))%1-范数

x2=sqrt(sum(abs(x).^2))%2-范数

xinf=max(abs(x))%无穷-范数

p=input('多少范数?

输入p=')

xp=(sum(abs(x).^p)).^(1/p)%p-范数

2.矩阵范数:

clear

a=input('输入一个矩阵\na=')

x1=max(sum(abs(a)))%1-范数

x2=sqrt(max(eig(a'*a)))%2-范数

xinf=max(sum(abs(a)'))%无穷-范数

xF=sqrt(sum(sum(a.^2)))%F-范数

3.高斯消去法:

设Ax=b,

clear

a=input('输入一个系数矩阵\na=')

b=input('输入一个自由项\nb=')

n=length(b);

fork=1:

n-1

fori=k+1:

n

l(i,k)=-a(i,k)/a(k,k);

forj=k:

n

a(i,j)=a(i,j)+l(i,k)*a(k,j);

end

b(i)=b(i)+l(i,k)*b(k);

end

end

zengguang=[a,b]

x(n)=b(n)/a(n,n);

fork=n-1:

-1:

1

t=0;

forj=k+1:

n

t=t+a(k,j)*x(j)

end

x(k)=(b(k)-t)/a(k,k);

end

x

输入一个系数矩阵

a=[111;04-1;2-21]

a=

111

04-1

2-21

输入一个自由项

b=[6;5;1]

b=

6

5

1

zengguang=

1116

04-15

00-2-6

x=

123

4.判断一个数字是否是素数。

clear

a=input('a=')

fori=2:

a-1

ifrem(a,i)==0

sprintf('%d不是素数',a)

break

end

end

ifa==i+1

sprintf('%d是素数',a)

end

clear

clc

a=input('输入系数矩阵a=')

b=input('输入自由项b=')

n=length(b);

D=diag(diag(a))

L=zeros(n);

U=zeros(n);

fori=1:

n-1

L(i+1:

n,i)=-a(i+1:

n,i)

end

fori=1:

n-1

U(i,i+1:

n)=-a(i,i+1:

n)

end

x1=input('迭代初始值x1=')

x1=x1';

derta=input('输入精度要求derta=')

ifderta<=0derta=0.00001

end

%%%%%%%%%%%%%%%%雅克比迭代法矩阵迭代%

t=1;

while(t>derta)

x2=inv(D)*(L+U)*x1+inv(D)*b;

t=max(abs(x1-x2));

x1=x2;

end

input('回车后输出雅克比迭代法矩阵迭代的解x=')

x2

%%%%%%%%%%%%%%雅克比迭代法元素迭代法%

t=1;

while(t>derta)

fori=1:

n

tt=0;

forj=1:

i-1

tt=tt+a(i,j)*x1(j);

end

ttt=0;

forj=i+1:

n

ttt=ttt+a(i,j)*x1(j);

end

x2(i)=(b(i)-tt-ttt)/a(i,i);

end

t=max(abs(x1-x2));

x1=x2;

end

input('回车后输出雅克比迭代法元素迭代的解x=')

x2

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%高斯迭代法矩阵迭代%

t=1;

while(t>derta)

x2=inv(D-L)*U*x1+inv(D-L)*b;

t=max(abs(x1-x2));

x1=x2;

end

input('回车后输出高斯迭代法矩阵迭代的解x=')

x2

%%%%%%%%%%%%%%高斯迭代法元素迭代法%

t=1;

while(t>derta)

fori=1:

n

tt=0;

forj=1:

i-1

tt=tt+a(i,j)*x2(j);

end

ttt=0;

forj=i+1:

n

ttt=ttt+a(i,j)*x1(j);

end

x2(i)=(b(i)-tt-ttt)/a(i,i);

end

t=max(abs(x1-x2));

x1=x2;

end

input('回车后输出高斯迭代法元素迭代的解x=')

x2

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%逐次超松弛迭代法矩阵迭代%

t=1;

w=input('输入超松弛因子w=')

ifw>0&w<=2

w=w;

elsew=0.15;

end

while(t>derta)

x2=inv(D-w*L)*((1-w)*D+w*U)*x1+w*inv(D-w*L)*b;

t=max(abs(x1-x2));

x1=x2;

end

input('回车后输出超松弛迭代法矩阵迭代的解x=')

x2

%%%%%%%%%%%%%%超松弛迭代法元素迭代法%

t=1;

while(t>derta)

fori=1:

n

tt=0;

forj=1:

i-1

tt=tt+a(i,j)*x2(j);

end

ttt=0;

forj=i+1:

n

ttt=ttt+a(i,j)*x1(j);

end

x2(i)=w*(b(i)-tt-ttt)/a(i,i)+x1(i);

end

t=max(abs(x1-x2));

x1=x2;

end

input('回车后输出超松弛迭代法元素迭代的解x=')

x2

%输入系数矩阵a=[-4111;1-411;11-41;111-4]

 

%输入自由项b=[1;1;1;1]

%迭代初始值x1=[0000]

%输入精度要求derta=0.000046

clear

a=input('任意输入一个数a=')

fork=2:

a-1

ifrem(a,k)==0

sprintf('%d不是素数',a)

break

end

end

ifk==a-1

sprintf('%d是素数',a)

end

%%%向量范数通用程序

clear

x=input('输入一个向量\nx=')

x1=sum(abs(x))%1-范数

x2=sqrt(sum(abs(x).^2))%2-范数

xinf=max(abs(x))%无穷-范数

p=input('多少范数?

输入p=')

xp=(sum(abs(x).^p)).^(1/p)%p-范数

%%%矩阵范数通用程序

clear

a=input('输入一个矩阵\na=')

x1=max(sum(abs(a)))%1-范数

x2=sqrt(max(eig(a'*a)))%2-范数

xinf=max(sum(abs(a)'))%无穷-范数

xF=sqrt(sum(sum(a.^2)))%F-范数

%%%高斯顺序消去法通用程序

clear

a=input('输入一个系数矩阵\na=')

b=input('输入一个自由项\nb=')

n=length(b);

fork=1:

n-1

fori=k+1:

n

l(i,k)=-a(i,k)/a(k,k);

forj=k:

n

a(i,j)=a(i,j)+l(i,k)*a(k,j);

end

b(i)=b(i)+l(i,k)*b(k);

end

end

zengguang=[a,b]

x(n)=b(n)/a(n,n);

fork=n-1:

-1:

1

t=0;

forj=k+1:

n

t=t+a(k,j)*x(j)

end

x(k)=(b(k)-t)/a(k,k);

end

x

clear

clc

x0=input('输入初值x0=')

ifabs(x0)>0

x0=x0;

elsex0=1.5

end

x=sym('x');

%f='x-x^3-4*x^2+10'

f=input('输入迭代函数f=')

t=1;

pp=1;

%%%%%%下面判断迭代是否收敛

g=diff(f);

x=x0;

gg=eval(g)

ifabs(gg)>1

x1='迭代格式不收敛'

else

derta=input('输入迭代精度derta=')

ifabs(derta)>0

derta=derta;

elsederta=0.000001;

end

t=1;

x=x0;

while(t>derta)

pp=pp+1;

x1=eval(f);

t=abs(x1-x);

x=x1;

ifpp>10000%如果不收敛,则迭代10000次后自动终止

x1='迭代超过10000次';

break;

end

end

end

p

x1

%f='x-x^3-4*x^2+10'

%f='1/2*(10-x^3)^(1/2)'

%f='(10/x-4*x)^(1/2)'

%f='(10/(4+x))^(1/2)'

%f='x-(x^3+4*x^2-10)/(3*x^2+8*x)'

%%%%%%%%%%%%%%%%结果展示

%输入初值x0=1.5

%x0=

%1.5000

%输入迭代函数f='x-x^3-4*x^2+10'

%f=

%x-x^3-4*x^2+10

%输入迭代精度derta=0.00002

%derta=

%2.0000e-005

 

%x1=

%NaN

clear

clc

x0=input('输入初值x0=')

ifabs(x0)>0

x0=x0;

elsex0=1.5

end

x=sym('x');

%f='x-x^3-4*x^2+10'

f=input('输入迭代函数f=')

t=1;

pp=1;

%%%%%%下面判断迭代是否收敛

g=diff(f);

x=x0;

gg=eval(g);

ifabs(gg)>1

x1='迭代格式不收敛'

else

derta=input('输入迭代精度derta=')

ifabs(derta)>0

derta=derta;

elsederta=0.000001;

end

t=1;

x=x0;

w=1/(1-gg);%加权因子

while(t>derta)

pp=pp+1;

x1=w*x+(1-w)*eval(f);%两个组合的叠加

t=abs(x1-x);

x=x1;

ifpp>10000%如果不收敛,则迭代10000次后自动终止

x1='迭代超过10000次';

break;

end

end

end

p

x1

%f='x-x^3-4*x^2+10'

%f='1/2*(10-x^3)^(1/2)'

%f='(10/x-4*x)^(1/2)'

%f='(10/(4+x))^(1/2)'

%f='x-(x^3+4*x^2-10)/(3*x^2+8*x)'

%%%%%%%%%%%%%%%%

clear

clc

x0=input('输入初值x0=')

ifabs(x0)>0

x0=x0;

elsex0=1.5

end

x=sym('x');

%f='x-x^3-4*x^2+10'

f=input('输入迭代函数f=')

t=1;

pp=1;

%%%%%%下面判断迭代是否收敛

g=diff(f);

x=x0;

gg=eval(g);

ifabs(gg)>1

x1='迭代格式不收敛'

else

derta=input('输入迭代精度derta=')

ifabs(derta)>0

derta=derta;

elsederta=0.000001;

end

t=1;

x=x0;

w=1/(1-gg);%加权因子

while(t>derta)

pp=pp+1;

x2=x;

y=eval(f);

x=y;

z=eval(f);

x=x2;

x1=x-(y-x)^2/(z-2*y+x);%两个组合的叠加

t=abs(x1-x);

x=x1;

ifpp>10000%如果不收敛,则迭代10000次后自动终止

x1='迭代超过10000次';

break;

end

end

end

p

x1

%f='x-x^3-4*x^2+10'

%f='1/2*(10-x^3)^(1/2)'

%f='(10/x-4*x)^(1/2)'

%f='(10/(4+x))^(1/2)'

%f='x-(x^3+4*x^2-10)/(3*x^2+8*x)'

%%%%%%%%%%%%%%%%

%乘幂法

clear

clc

A=input('输入一个n阶方阵A=')

n=length(A(1,:

))

v0=ones(1,n)';

u0=v0/max(v0)

q=1;

while(q>0.00000001)

v1=A*u0

j=1;

t=1;

fori=1:

n

ifabs(v1(i))>abs(v1(j))j=i;

end

end

fori=1:

n

ifabs(v0(i))>abs(v0(t))t=i;

end

end

u1=v1./v1(j)

q=abs(abs(v1(j))-abs(v0(t)));

u0=u1;

v0=v1;

end

j=1;

fori=1:

n

ifabs(v1(i))>abs(v1(j))j=i;

end

end

lamda=v1(j)

tezhengxiangliang=v1'./v1(j)

 

%输入一个n阶方阵A=[-1233;31-2;3-27]

 

clear

clc

x0=input('输入起始节点坐标x0=')

h=input('输入步长h=')

y=input('输入节点坐标函数值f(x)=')

x2=input('输入所要计算的节点x2=')

symst

n=length(y);

fori=1:

n

x1(i)=x0+h*(i-1);

end

%%%%%%%%%%%%%%%%%%%%差分的求法

fori=2:

n

f1(i,1)=(y(i)-y(i-1));

end

fori=2:

n

forj=i+1:

n

f1(j,i)=(f1(j,i-1)-f1(j-1,i-1));

end

end

f1=[y',f1]%输出带0阶差分的差分表格

%%%%%%%%%%%%%%%%%%%%%%%%%%等距节点插值函数中牛顿向前插值函数

Newton1=f1(1,1);

ttt=1;

fori=2:

n

tt=1;

forj=1:

i-1

tt=tt*(t-j+1);

end

ttt=ttt*(i-1);

Newton1=Newton1+f1(i,i)*tt/(ttt)

end

fprintf('等距节点插值函数中牛顿向前插值函数为\n')

expand(Newton1)

t=(x2-x0)/h;

p=eval(Newton1);

fprintf('等距节点插值函数中牛顿向前插值函数为在所求点x2的函数值为\n')

p

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

%输入起始节点坐标x0=0.4

%输入步长h=0.1

%输入节点坐标函数值f(x)=[0.389420.479430.56464]

%输入所要计算的节点x2=0.43251

%Newton插值函数为为:

1+17/6*x-2/3*x^2+1/6*x^4-1/3*x^3

%Newton插值函数在所求点x2的函数值为:

23

clear

clc

x0=input('输入起始节点坐标x0=')

h=input('输入步长h=')

y=input('输入节点坐标函数值f(x)=')

x2=input('输入所要计算的节点x2=')

symst

n=length(y);

fori=1:

n

x1(i)=x0+h*(i-1);

end

%%%%%%%%%%%%%%%%%%%%差分的求法

fori=2:

n

f1(i,1)=(y(i)-y(i-1));

end

fori=2:

n

forj=i+1:

n

f1(j,i)=(f1(j,i-1)-f1(j-1,i-1));

end

end

f1=[y',f1]%输出带0阶差分的差分表格

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%等距节点插值函数中牛顿向后插值函数

Newton2=f1(n,1);

ttt=1;

fori=2:

n

tt=1;

forj=1:

i-1

tt=tt*(t-j+1);

end

ttt=ttt*(i-1);

Newton2=Newton2+f1(n,i)*tt/(ttt)

end

fprintf('等距节点插值函数中牛顿向后插值函数为\n')

expand(Newton2)

t=(x2-x0)/h;

p=eval(Newton2);

fprintf('等距节点插值函数中牛顿向后插值函数为在所求点x2的函数值为\n')

p

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

%输入起始节点坐标x0=0.4

%输入步长h=0.1

%输入节点坐标函数值f(x)=[0.389420.479430.56464]

%输入所要计算的节点x2=0.43251

%Newton插值函数为为:

1+17/6*x-2/3*x^2+1/6*x^4-1/3*x^3

%Newton插值函数在所求点x2的函数值为:

23

clear

clc

formatlong

symsx

f=input('输入被积函数f=')

a=input('输入积分区间[ab]=')

%%%%%%%%%%%%%%%%%%%%%梯形积分公式

('梯形积分公式')

x=a

(1);

f1=eval(f);

x=a

(2);

f2=eval(f);

fun=(f1+f2)*(a

(2)-a

(1))/2

%%%%%%%%%%%%%%%%%%%%%辛普森积分公式

('辛普森积分公式')

x=a

(1);

f1=eval(f);

x=(a

(1)+a

(2))/2;

f2=eval(f);

x=a

(2);

f3=eval(f);

fun=(f1+4*f2+f3)*(a

(2)-a

(1))/6

%%%%%%%%%%%%%%%%%%%%%科特斯积分公式

('科特斯积分公式')

h=(a

(2)-a

(1))/4;

x=a

(1);

f1=eval(f);

x=a

(1)+h;

f2=eval(f);

x=a

(1)+2*h;

f3=eval(f);

x=a

(1)+3*h;

f4=eval(f);

x=a

(1)+4*h;

f5=eval(f);

fun=(7*f1+32*f2+12*f3+32*f4+7*f5)*(a

(2)-a

(1))/90

%实例验证p176例7.5

%输入被积函数f=sqrt(x)

%输入积分区间[ab]=[0.51]

 

clear

clc

a=input('输入系数矩阵a=')

b=input('输入自由项b=')

x1=input('输入初始值x1=')

n=length(b);

ifsum(abs(x1))>0

x1=x1;

elsex1=zeros(1,n);

end

t=2;

%%%%%%%%%%%%%%%%%雅克比迭代法

while(t>0.00001)

fori=1:

n

q=0;

forj=1:

i-1

q=q+a(i,j)*x1(j);

end

p=0;

forj=i+1:

n

p=p+a(i,j)*x1(j);

end

x2(i)=(b(i)-q-p)/a(i,i);

end

t=max(abs(x2-x1));

x1=x2;

end

x2

 

%%%%%%%%%%%%%%%%%%%%%%%%高斯赛德尔迭代法

while(t>0.00001)

fori=1:

n

q=0;

forj=1:

i-1

q=q+a(i,j)*x2(j);

end

p=0;

forj=i+1:

n

p=p+a(i,j)*x1(j);

end

x2(i)=(b(i)-q-p)/a(i,i);

end

t=max(abs(x2-x1));

x1=x2;

end

x2

%%%%%%%%%%%%%%%%%%%%%%%%%%%超松弛迭代法

w=input('输入松弛因子(0

ifw>0w=w;

elsew=0.5

end

while(t>0.00001)

fori=1:

n

q=0;

forj=1:

i-1

q=q+a(i,j)*x2(j);

end

p=0;

forj=i+1:

n

p=p+a(i,j)*x1(j);

end

x2(i)=w*(b(i)-q-p)/a(i,i)+x1(i);

end

t=max(abs(x2-x1));

x1=x2;

end

x2

 

%%%%%%%%%%%

%输入系数矩阵a=[-4111;1-411;11-41;111-4]

%a=

%-4111

%1-411

%11-41

%111-4

%输入自由项b=[1111]

%b=

%1111

%输入初始值x1=[0000]

%x1=

%0000

%雅克比迭代结果

%x2=

%-1.0000-1.0000-1.0000-1.0000

%高斯赛德尔迭代结果

%x2=

%-1.0000-1.0000-1.0000-1.0000

%

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1