admin 管理员组文章数量: 1087139
2024年3月8日发(作者:fclose(fid))
2 微积分实验
2.1 基础训练
1. 已知yecos(mx),利用符号运算函数求y.
编写函数文件返回求导结果(1个参数).
解:
function d=myfun
syms m n x
y=exp(n*x)*cos(m*x);
d = diff(y,x,2);
2. 已知函数ynxaexax22,求解该函数在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. 使用符号工具箱计算函数y1的6阶麦克劳林多项式. 要求编写一个function文21x件返回该结果.
解:
function f=fun
syms x
f = taylor(1/(1+x^2),x, 'order',7);
f = simplify(f);
4. 求不定积分xlnxdx和定积分21xex2dx。
syms x
int(log(x)^2*x)
f=x*exp(-x^2);
int(f,x,1,inf)
5. 求解方程组
4x5y6z3d112x6y2zd10求下列联立方程的解.
3x2y8z2d6x2y3z9d15编程调用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.56x412.6210.36x0.852x1x3y174.42xxxx6x75213/2x4x21.16
000元;y的目标值(记作y0)为1.50, 当y偏离y00.1时,产品为次品,质量损失为1
当y偏离y00.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个零件参数的标定值为:x10.1,x20.3,x30.1,x40.1,x51.5,x616,x70.75。
请你综合考虑y偏离y0造成的损失和零件成本,重新设计零件参数(包括标定值和容差),并与原设计比较,总费用降低了多少。
一.实验任务
f计算,i1,2,,7,xi这些偏导数函数在x10.1,x20.3,x30.1,x40.1,x51.5,x616,x70.75的函数值.
1. 请编程计算函数yf(x1,x2,x3,x4,x5,x6,x7)的一阶偏导数2. 编程计算y在点x10.1,x20.3,x30.1,x40.1,x51.5,x616,x70.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. 体会到了数学软件符号计算功能的强大。
版权声明:本文标题:电子科技大学数学实验第二次课上微积分实验及答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1709904392a549587.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论