syms x y p;
z = p+x+y; % 3 个自变量 p x y
p = xy; % p 是 x y 的函数
z = subs(z);
ezmesh(x,y,z);
function f = fun(x,flag)
if(nargin==1)
f =(sin(x)+cos(x))/x;
else
if(nargin==2)
if(flag==1)
f=sin(x)/x;
else
f= cos(x)/x;
end
end
end
需求:利用matlab求解二元函数 y=f(x1,x2)
=(339-001x1-0003x2)x1 +(399-0004x1-001x2)x2-(400000+195x1+225x2) 的最大值
步骤:1、syms x1 x2;
2、y=(339-001x1-0003x2)x1+(399-0004x1-001x2)x2-(400000+195x1+225x2) 得 y = - 195x1 - 225x2 - x1(x1/100 + (3x2)/1000 - 339) - x2(x1/250 + x2/100 - 399) - 400000
3、y=simple(y) 得 y = - x1^2/100 - (7x1x2)/1000 + 144x1 - x2^2/100 + 174x2 - 400000
4、求偏导 dydx1=diff(y,x1) 得 dydx1 = 144 - (7x2)/1000 - x1/50 dydx2=diff(y,x2) 得 dydx2 = 174 - x2/50 - (7x1)/1000
5、令偏导等于0,解方程 S=solve(dydx1,dydx2) 得 S = x1: [1x1 sym] x2: [1x1 sym]
6、显示结果 Sx1 得 ans = 554000/117 Sx2 得 ans = 824000/117
7、把得到的结果代入原f(x1,x2),求最大y值:
y=subs(y,x1,554000/117); y=subs(y,x2,824000/117) 得 y = 55364e+005
当然,该最大值是不是真正的最大值,还需要进一步结合实际情况验证(通过画出图形,观察二阶导数的符号等)。比如,syms x1 x2; y=(339-001x1-0003x2)x1+(399-0004x1-001x2)x2-(400000+195x1+225x2);然后使用 ezsurf(y,[0 10000],[0 10000]);就可以得到三维的图形如下图所示:
可以看到,在感兴趣区间内,函数是有最大值的,即上面求出的y = 55364e+005,在x1=554000/117,x2=824000/117处取得。
matlab的数据处理能力很强大,这款软件还能绘制各种函数图形。下面我将介绍用matlab画函数图形的方法,以在同一张图上画出y1=sin(x)和y2=sin^2(x)的图形为例。
输入自变量:
画已知的函数图形,用向量的方式表示自变量比较方便。代码为
x=linspace(0,8); % 用向量形式创建x。
输入因变量表达式:
y1=sin(x); % 向量y1的值为x坐标上某一x的s i n ( 2 x )值。
y2=(sin(x))^2 ; % 向量y2的值为( s i n ( x ) ) ^2,注意别忘记一点”“
使用plot命令画图:
plot(x,y1)
按回车,则画出y1=sin(x)的图形。
如果这时直接继续画y2=sin^2(x)的图形,则在另一张图中画,为了在同一张图中画两个函数图,输入下面代码:
hold on
再输入绘图命令:
plot(x,y2)
按回车,则在同一张图上画出了这两个函数的图形。可以通过菜单栏中的insert添加坐标名称,文本等。
其他函数的画法类似!
y2=(sin(x))^2,代码中别忘了括号后面的一点”"
希望对您有用!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)