admin 管理员组

文章数量: 1087139


2024年3月8日发(作者:fclose(fid))

2 微积分实验

2.1 基础训练

1. 已知yecos(mx),利用符号运算函数求y.

编写函数文件返回求导结果(1个参数).

解:

function d=myfun

syms m n x

y=exp(n*x)*cos(m*x);

d = diff(y,x,2);

2. 已知函数ynxaexax22,求解该函数在x=5处的一阶导数值.

编写本问题的函数文件第一行格式如下(函数名、文件名自己设定):

function r=myfun

%变量r存储导数值

解:

function r=myfun

syms a x

y=a*exp(x)/sqrt(a^2+x^2);

f=diff(y,x);

r=subs(f,x,5);

3. 使用符号工具箱计算函数y1的6阶麦克劳林多项式. 要求编写一个function文21x件返回该结果.

解:

function f=fun

syms x

f = taylor(1/(1+x^2),x, 'order',7);

f = simplify(f);

4. 求不定积分xlnxdx和定积分21xex2dx。

syms x

int(log(x)^2*x)

f=x*exp(-x^2);

int(f,x,1,inf)

5. 求解方程组

4x5y6z3d112x6y2zd10求下列联立方程的解.

3x2y8z2d6x2y3z9d15编程调用solve函数求解方程组;编写函数返回4个参数:依次为x,y,z,d所得结果。

编写本问题的函数文件第一行格式如下(函数名、文件名自己设定):

function [x,y,z,d]=myfun

% x,y,z,d为题目所求的解

解:

function [x,y,z,d]=myfun

% x,y,z,d为题目所求的解

[x,y,z,d]=solve('4*x+5*y-6*z+3*d=11','2*x+6*y+2*z-d=10',...

'3*x-2*y+8*z+2*d=6','x+2*y+3*z+9*d=15')

2.2 实验任务

问题来源

全国数学建模竞赛1997年A题

一件产品由若干零件组装而成,标志产品性能的某个参数取决于这些零件的参数。零件参数包括标定值和容差两部分。进行成批生产时,标定值表示一批零件该参数的平均值,容差则给出了参数偏离其标定值的容许范围。若将零件参数视为随机变量,则标定值代表期望值,在生产部门无特殊要求时,容差通常规定为均方差的3倍。

进行零件参数设计,就是要确定其标定值和容差。这时要考虑两方面因素:

一、 各零件组装成产品时,如果产品参数偏离预先设定的目标值,就会造成质量损失,偏离越大,损失越大;

二、 零件容差的大小决定了其制造成本,容差设计得越小,成本越高。

试通过如下的具体问题给出一般的零件参数设计方法。

0.56x412.6210.36x0.852x1x3y174.42xxxx6x75213/2x4x21.16

000元;y的目标值(记作y0)为1.50, 当y偏离y00.1时,产品为次品,质量损失为1

当y偏离y00.3时,产品为废品,损失为9 000元.

零件参数的标定值有一定的容许变化范围;容差分为A、B、C三个等级,用与标定值的相对值表示,A等为1%,B等为5%,C等为10%。7个零件参数标定值的容许范围,及不同容差等级零件的成本(元)如下表(符号/表示无此等级):

.

标定值容许范围 C等 B等 A等

x1

[0.075,0.125] / 25 /

x2 [0.225,0.375] 20 50 /

x3 [0.075,0.125] 20 50 200

x4 [0.075,0.125] 50 100 500

x5 [1.125,1.875] 50 / /

x6 [12,20] 10 25 100

x7 [0.5625,0.935] / 25 100

现进行成批生产,每批产量1000个,在原设计中,7个零件参数的标定值为:x10.1,x20.3,x30.1,x40.1,x51.5,x616,x70.75。

请你综合考虑y偏离y0造成的损失和零件成本,重新设计零件参数(包括标定值和容差),并与原设计比较,总费用降低了多少。

一.实验任务

f计算,i1,2,,7,xi这些偏导数函数在x10.1,x20.3,x30.1,x40.1,x51.5,x616,x70.75的函数值.

1. 请编程计算函数yf(x1,x2,x3,x4,x5,x6,x7)的一阶偏导数2. 编程计算y在点x10.1,x20.3,x30.1,x40.1,x51.5,x616,x70.75的一阶泰勒多项式,并计算其在以下点的函数值。

x3

x1

x2

x4

点1

点2

点3

0.1

0.11

0.09

0.3

0.36

0.25

0.1

0.08

0.08

0.1

0.09

0.11

x5

1.5

1.6

1.7

x6

16

14

18

x7

0.75

0.65

0.9

二. 实验目的

熟悉Matlab符号计算函数;

掌握inline函数的创建方法.

熟悉字符串操作函数sprintf;

熟悉eval函数用法;

了解查看变量类型函数class的用法;

三. 实验过程

由于产品参数函数y比较复杂,手工计算函数y的偏导数比较费时,容易出错. 因此,可以利用Matlab提供的符号计算工具箱完成计算.

可以利用全微分的概念来理解多元函数的一阶泰勒多项式。

编程实现:

参考答案一:

clear

clc

N=7;

str=[];

for i=1:N

eval(sprintf('syms x%d',i));

end

%funy=x1*x2-x3+x4-x5^3*x6*x7;

funy = 174.42*(x1/x5)*(x3/(x2 - x1))^0.85*...

sqrt((1 - 2.62*(1 - 0.36*(x4/x2)^(-0.56))^(3/2)*(x4/x2)^1.16)/(x6*x7));

for i=1:N

F(i)=eval(sprintf('diff(funy,x%d)',i));

end

x=[];

for i=1:7

eval(sprintf('x=[x,x%d];',i));

end

a=[0.1 0.3 0.1 0.1 1.5 16 0.75];

A=[0.1 0.3 0.1 0.1 1.5 16 0.75;

0.11 0.36 0.08 0.09 1.6 14 0.65;

0.09 0.25 0.08 0.11 1.7 18 0.9];

for k=1:N

valF(k)=subs(F(k),x,a);

end

valF

Ftaylor=subs(funy,x,a)+sum((x-a).*valF);

for i=1:size(A,1)

val(i)=subs(Ftaylor,x,A(i,:));

end

val

参考答案二:

clear

clc

for i=1:7,%声明符号变量,借助eval执行字符串语句实现

eval(strcat('syms x',num2str(i)))

end

funy = 174.42*(x1/x5)*(x3/(x2 - x1))^0.85*...

sqrt((1 - 2.62*(1 -

0.36*(x4/x2)^(-0.56))^(3/2)*(x4/x2)^1.16)/(x6*x7));

for i=1:7,%求偏导F1,F2,...,F7

fmt=['F(%d)= diff(funy,''x%d'');'];

str = sprintf(fmt, i,i);

disp(str)

eval(str)

end

disp('显示求导结果: ')

v=[0.1 0.3 0.1 0.1 1.5 16 0.75];

for i=1:7 %计算偏导函数的函数值

valF(i)=subs(F(i),{x1,x2,x3,x4,x5,x6,x7},{v(1),v(2),v(3),v(4),v(5),v(6),v(7)});

end

funy0=subs(funy,{x1,x2,x3,x4,x5,x6,x7},{v(1),v(2),v(3),v(4),v(5),v(6),v(7)});%计算原函数在X0点函数值

Ftaylin=funy0 + valF(1)*(x1-v(1)) + valF(2)*(x2-v(2)) +

valF(3)*(x3-v(3))+...

valF(4)*(x4-v(4)) + valF(5)*(x5-v(5)) + valF(6)*(x6-v(6)) +

valF(7)*(x7-v(7));

Funtaylin=inline(char(Ftaylin),'x1','x2','x3','x4','x5','x6','x7');

%char先将符号变量转换为字符串,

%第1问解答:然后用inline创建函数(用于后面计算函数y在某点的偏导数)

Fun1 =inline(char(F(1)),'x1','x2','x3','x4','x5','x6','x7');

Fun2 =inline(char(F(2)),'x1','x2','x3','x4','x5','x6','x7');

Fun3 =inline(char(F(3)),'x1','x2','x3','x4','x5','x6','x7');

Fun4 =inline(char(F(4)),'x1','x2','x3','x4','x5','x6','x7');

Fun5 =inline(char(F(5)),'x1','x2','x3','x4','x5','x6','x7');

Fun6 =inline(char(F(6)),'x1','x2','x3','x4','x5','x6','x7');

Fun7 =inline(char(F(7)),'x1','x2','x3','x4','x5','x6','x7');

p=[0.1 0.3 0.1 0.1 1.5 16 0.75

0.11 0.36 0.08 0.09 1.6 14 0.65

0.09 0.25 0.08 0.11 1.7 18 0.9];

p = double(p);

for i=1:3 %计算在这几个点的函数值第2问解答

val(i)=Funtaylin(p(i,1),p(i,2),p(i,3),p(i,4),p(i,5),p(i,6),p(i,7));

end

val

三点函数值:

val =

1.7256 1.4668 0.9351

四. 实验自评与改进方向

1. 对泰勒公式不熟悉,实验较为困难;

2. 首次使用符合计算完成微积分计算,容易出错。

五. 实验体会,收获及建议

1. 了解了多元函数的泰勒公式;

2. 体会到了数学软件符号计算功能的强大。


本文标签: 函数 参数 计算 标定