matlab里求两个数s1,s2的最大值max(s1,s2),然后再求这个最大值曲线的最小值和对应的自变量

matlab里两个数s1,s2分别是两个自变量x1,x2的函数,x1,x2分别都有变化范围例如x1从1到10变化,x2从2到11变化(不一定是整数变化),这时候我要求每一个x1,x2变化对应的s1,s2的最大值s=max(s1,s2),然后在比较每一个x1,x2变化对应的s1,s2的最大值s的最小值。感觉逻辑好复杂啊,求大神解答啊!急要,万分感谢!
然后在比较每一个x1,x2变化对应的s1,s2的最大值s的最小值的意思,就是求整个变化范围内的min(max(s1,s2))

第1个回答  2013-09-01
我这样归纳了一下您的问题:
已知:变量x1和x2的取值范围lx1<x1<ux1,lx2<x2<ux2;函数s1(x1)和s2(x2)。
求:函数s(x1, x2) = max{s1(x1), s2(x2)} 和 s的最小值。
是这样吗?
最简单的方法是直接在所给的整个定义域内,按某个采样间隔,求出函数s的每个采样点上的值,然后从中搜索最小值。您看这个思路可以接受吗?追问

那个函数s1是两个变量x1,x2的函数,s2也是,不是分别是x1,x2的函数。还有大神,因为我们是需要这个最优解解决实际问题,matlab是需要了才会用,所以还希望大神能把程序大致写下可以吗?

追答

问题模型修改如下
已知:变量x1和x2的取值范围lx1<x1<ux1,lx2<x2<ux2;函数s1(x1,x2)和s2(x1, x2)。
求:函数s(x1, x2) = max{s1, s2} 和 s的最小值。
但是后面我就不懂了。“因为……,所以希望写下程序”的因果关系在那里?您到底是要不要用matlab?我觉得思路已经说清楚了,算法有了实现就不难了。

追问

要用,我的意思matlab平时基本没怎么用,所以不太会。。。希望你把具体的程序写下,谢谢!
你的分析是对的。

追答

x1 = (1:0.1:10).'; x2 = (2:0.1:11).'; %定义x1 x2的取值范围和采样间隔0.1
[X1, X2] = meshgrid(x1, x2); % 生成二维网格X1 X2
s1 = @(x,y)(...); s2 = @(x,y)(...); % 定义函数s1 s2 注意这里的语法,自变量x,y要视作矩阵
s = max(s1(X1, X2), s2(X1, X2)); % 求出s
mesh(X1, X2, s); % 画出s
[max_s, ind_max_s] = max(s); % 求出s的最大值
max_s_x1 = X1(ind_max_s);
max_s_x2 = X2(ind_max_s); % 求出s的最大值点

追问

“s1 = @(x,y)(...); s2 = @(x,y)(...);% 定义函数s1 s2 注意这里的语法,自变量x,y要视作矩阵
”这句话是什么意思啊?那个x,y是哪里出来的?是x1,x2的意思吗?那个括号里写得是s1和s2对应的x1,x2的函数吗?如果是的话,是写大写的还是小写的。请原谅我的无知。。。谢谢!

追答

这样吧,如果你的函数比较复杂,可以换一种方式:
1 去掉那一行,然后另外写两个m文件来定义函数s1和s2 (matlab里定义函数总该见过吧)。这一行的作用也仅仅是定义函数s1、s2,而没有调用,所以形参可以随便取名字。
2 s = max(s1(X1, X2), s2(X1, X2)); 这一行才调用了函数s1s2。数学上定义的时候,s1和s2的自变量是两个实数,但是在matlab里为了快速计算,这里传入的是矩阵,所以前面定义的时候语法上要注意用逐元素运算。
3 大小写这个事情更是完全没听说过了。matlab是对大小写敏感的。

本回答被提问者采纳

请教高手:matlab求三元函数的最小值问题
对一组点(x,y) 进行插值,计算插值点xi的函数值。x为节点向量值,y为对应的节点函数值。如果y 为矩阵,则插值对y 的每一列进行,若y 的维数超出x或 xi 的维数,则返回NaN。◆ yi=interp1(y,xi)此格式默认x=1:n ,n为向量y的元素个数值,或等于矩阵y的size(y,1)。◆ yi=interp1(x,y,xi,’method’...

如何用matlab求解一个二阶常系数微分方程组
用命令:dsolve('S','s1','s2',…,'x')其中S 为方程s1,s1,s3,…为初始条件x 为自变量方程S 中用D 表示求导 数D2,D3,…表示二阶三阶等高阶导数初始条件缺省时给出带任意常数 C1,C2,..的通解自变量缺省值为t 也可求解微分方程组 例 1、dsolve('Dy=1+y^2')结果ans =tan(t+C1)2...

在MATLAB里如何输入,分别求解这两题?
s1=abs(int(sqrt(8-x^2)-x^2,x1,x2))求下部面积 s2=vpa(s-s1)

如何用matlab求解一个二阶常系数微分方程组
第二种方法:利用Matlab中的solver函数(包括ode45、ode23、ode15s等)来求解微分方程的数值解,这种方法是最常用的方法,对于dsolve函数难以求解的方程就可以利用这种方法求解方程的数值解。1、 打开Matlab-->新建一个脚本文件用于编写求解程序。2、 在脚本文件中输入求解程序-->点击保存-->点击运行。3、...

怎么用MATLAB求二次函数最小值
xx=min(x):0.1:max(x);yy=polyval(p2,x);Y=vpa(poly2sym(p2,'x'),6)%转化为多项式格式 Y1=diff(Y)%求一阶导数 Xmin=eval(solve(Y1))%一阶导数等于零,极值点 Ymin=polyval(p2,Xmin)plot(x,y,'o',xx,yy,Xmin,Ymin,'*')结果:p2 = 932.1 -82142 1.8314e+006 Y =...

2、设计一个小程序可以求任意两个数的和,差,积,商
s1=inputbox("请输入第一个数:")s2=inputbox("请输入第二个数:")if fh="+" then msgbox cdbl(s1)+cdbl(s2)end if if fh="-" then msgbox cdbl(s1)-cdbl(s2)end if if fh="*" then msgbox cdbl(s1)*cdbl(s2)end if if fh="\/" then msgbox cdbl(s1)\/cdbl(s2)end if '将...

matlab求一阶,二阶导数,并画图
l=((-c*b+c*a+x).^2+(-b\/4+a\/4+y).^2+z.^2).^(1\/2);n=length(t);s1=diag(ones(1,n-1),-1)+diag(ones(1,n));s1(:,end)=[];s2=s1(1:end-1,1:end-1);t1=t*s1\/2;t2=t1*s2\/2;v11=diff(l);v12=diff(l,2);subplot(2,1,1)plot(t1,v11)subplot(2,...

14.(15.0分)试模拟Matlab软件编写程序,求出 1+1
然后分别求和,最后相加。1、两个数列,即 S1=1\/2+1\/4+1\/6+...+1\/100 S2=-1\/3-1\/5-1\/7-...-1\/99 2、求和 >> syms k >> S1=symsum(1\/(2*k),k,50);>> S2=(-1)*symsum(1\/(2*k+1),k,49);3、相加 >> S=1+S1+S2 >> S=vpa(S)4、计算结果 ...

matlab怎么求多元一次方程组
可以用vpasolve求解。实现代码:for lambda=1:0.1:2 syms x qr=1.449*lambda.*(1-0.1416*lambda.^2).^3.0303;lambda1=vpasolve(1.57744*x*(1-0.1667*x.^2).^2.5==qr)end 运行结果 matlab解方程组lnx表示成log(x)而lgx表示成log10(x)1-exp(((log(y))\/x^0.5)\/(x-1))1...

(matlab)求s1信号的非相干信号s2生成程序
x1=randint(Pd,1,M);x2=randint(Pd,1,M);这里产生均匀分布的随机整数矩阵,本身就是两个非相干的信号。所以,后面的s2信号可以写成:y2=modmap(x2,Fd,Fs,'qask',M);[rcv_a1,ti]=rcosflt(y2,Fd,Fs,'fir\/sqrt\/Fs',R,Delay);s2=amodce(rcv_a1,10,'qam');

相似回答