现在时间是:
当前位置:首 页 >> 数学建模>> 教学区>> 文章列表

16074308王浩杰+作业4

作者:   发布时间:2019-04-13 21:53:28   浏览次数:33

第一部分

 

1.问题:设f(x)=3*x.^2./(x.^3-2*x.^2+3), 利用不少于四种方法求出f(x)在区间[0,2]上的积分,并且比较计算精度。

  分析:首先利用inline函数直接定义该函数,随后方法一:用辛普森方法直接计算积分;方法二:用洛巴托积分,用指定的绝对误差1e-8代替缺省误差;方法三:直接用符号函数的积分规则,用符号变量求解;方法四:利用梯形法计算[0,2]上的积分。

  代码:

fun=inline('3*x.^2./(x.^3-2*x.^2+3)');

s1=quad(fun,0,2,1e-8)

s2=quadl(fun,0,2) %QUADL 效率高

syms x f

f=3*x.^2./(x.^3-2*x.^2+3);

s3=int(f,x,0,2)

x=0:.1:2;

f=3*x.^2./(x.^3-2*x.^2+3);

s4=trapz(x,f)

  实验结果:

其中方法三int函数的积分计算最为精确,但计算时间较长;方法一和方法二实验结果精度相当,但使用辛普森求积,对于低精度或者不光滑函数效率更高,该而洛巴托求积的算法,对于高精度和光滑函数效率更高,在本题函数中比较不明显。而方法四梯形法的精度则取决于其计算的步长,步长小时,精度不高。

 

2.问题:设f(x,y,z)=exp(-x^2/2)*cos(x^2+y+z).

(1) z=0,f(x,y,0)在单位圆域 x^2+y^2<=1 上的二重积分。

(2) f(x,y,z)在单位球体域 x^2+y^2+z^2<=1 上的三重积分。

 

  分析:第一小问可视为积分限为[-1,1]的二重积分,令z=0,直接用dblquad函数计算即可。而第二小问则是正常的三重积分,用triplequard函数计算即可,算法与上题类似。

  代码:

f=inline('exp(-x.^2./2).*cos(x.^2+y)');

q=dblquad(f,-1,1,-1,1)

syms x y z

fun=inline('exp(-x.^2./2).*cos(x.^2+y+z)');

s=triplequad(fun,-1,1,-1,1,-1,1)

  实验结果:


3.问题:求如下函数最小值:Z(x,y)=x^3-y^3+3*x^2+3*y^3-9*x

约束条件:限制区域为x^2+y^2<=100, x<=4, y<= 5.

初值选取: [x0,y0]=[0.5,0.5].

  分析:在有约束最小化问题中,运用有约束最小化函数,确定各个参数,带入函数运算即可。

  代码:

%建立非线性约束函数文件

function [C,Ceq]=mycon(x)

C=x(1)^2+x(2)^2-100;

Ceq=[]; %无等式约束

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

f=inline('x(1)^3-x(2)^3+3*x(1)^2+3*x(2)^3-9*x(1)');

x0=[0.5,0.5];

A=[];b=[];

Aeq=[]; beq=[];

lb=[]; ub=[4,5];

[x,fval]=fmincon(f,x0,A,b,Aeq,beq,lb,ub,@mycon)

  实验结果:


4.问题:求解如下二次规划问题

 

max 2*x^2+y^2+48*x-40*y

s.t. x+3*y-18>=-5

  x+y<=20

  -x+y-8>=3

  分析:对于二次规划问题,首先将函数化为标准型,得到矩阵H,向量fx,随后将约束条件写成矩阵的形式,利用quadprog函数带入参数计算即可。

  代码:

H=[2,0;0,1];

f=[48;-40];

A=[-1,-3;1,1;1,-1];

b=[-13;20;-11];

Aeq=[];beq=[];

[x,fval]=quadprog(H,f,A,b,Aeq,beq,[],[])

  实验结果:


第二部分:

 

1.问题:编写求原点到任意平面的距离的程序,并且举例验证程序.

  分析:利用input实现任意平面的输入,然后根据点到平面的距离公式,直接运算即可。在程序运行后可在命令行窗口输入任意平面的参数检验。

  代码:

f=input('>>请输入f=');%平面方程Ax+By+Cz+D=0f=[A,B,C,D]来表示

p=[0 0 0];

d1=dot(f,[p,1]);

d2=sqrt(dot(f(1:3),f(1:3)));

disp('>>原点到该平面的距离d');

d=abs(d1/d2)

  实验结果:


2.问题:编写求原点到任意直线的距离的程序,并且举例验证程序.

  分析:利用input实现任意直线的输入,然后根据点到直线的距离公式,直接运算即可。在程序运行后可在命令行窗口输入任意直线的参数检验。

  代码:

vp=input('>>请输入vp=');

v=input('>>请输入v=');%空间直线由直线上一点vp=[x0,y0,z0]和方向向量v=[A,B,C]确定

p=[0 0 0];

vs=vp-p;c=cross(v,vs);

d1=sqrt(dot(c,c));

d2=sqrt(dot(v,v));

disp('>>原点到该直线的距离d');

d=abs(d1/d2)

 

  实验结果:


3.问题:编写求任意两个平面夹角的程序,并且举例验证程序.

  分析:利用input实现任意两平面的输入,然后根据两平面的夹角公式,直接运算即可,同时在求平面夹角时要使其小于pi/2。在程序运行后可在命令行窗口输入任意两平面的参数进行检验。

  代码:

clc;clear;

n1=input('>>请输入n1=');%平面方程A1x+B1y+C1z+D1=0n1=[A1,B1,C1,D1]来表示

n2=input('>>请输入n2=');%平面方程A2x+B2y+C2z+D2=0n2=[A2,B2,C2,D2]来表示

d1=dot(n1(1:3),n2(1:3));

d2=sqrt(dot(n1(1:3),n1(1:3)))*sqrt(dot(n2(1:3),n2(1:3)));

disp('>>任意两平面的夹角为:');

d=d1/d2;

a=acos(d);

if a<=pi/2

    a

else a>pi/2

    pi/2-a

end

  实验结果:


4.问题:设计求函数 f(x)=(x+a/x)/2 的不动点的迭代算法,并且编写程序验证.

  分析:用函数f(x)=x,带入初始值,将步长设置为100,迭代运算即可。

  代码:

clear all

x=input('请输入初始值,x0=');

a=input('请输入a=');

for i=1:100

    x=(x+a/x)/2;

    disp(['i=',num2str(i),'x=',num2str(x)]);

end

  实验结果:


 







上一篇:没有了    下一篇:没有了

Copyright ©2019    计算数学达人 All Right Reserved.

技术支持:自助建站 | 领地网站建设 |短信接口 |燕窝 版权所有 © 2005-2019 lingw.net.粤ICP备16125321号 -5