用matlab解非线性函数,刚入门的如题,我第一次用matlab,新建了个m文件编辑:function [f,g]=mengte(x);f=x(1)^2+2*x(2)+3*x(3)^3+x(4)^2-8g=[-x(1)^2+x(2)-x(3)^2 x(1)+x(2)^2+x(4)-28 x(1)+x(3)+x(4)^2-40 x(3)^2+x(4)^2-64 -x(

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 07:00:48

用matlab解非线性函数,刚入门的如题,我第一次用matlab,新建了个m文件编辑:function [f,g]=mengte(x);f=x(1)^2+2*x(2)+3*x(3)^3+x(4)^2-8g=[-x(1)^2+x(2)-x(3)^2 x(1)+x(2)^2+x(4)-28 x(1)+x(3)+x(4)^2-40 x(3)^2+x(4)^2-64 -x(
用matlab解非线性函数,刚入门的
如题,

我第一次用matlab,新建了个m文件
编辑:
function [f,g]=mengte(x);
f=x(1)^2+2*x(2)+3*x(3)^3+x(4)^2-8
g=[-x(1)^2+x(2)-x(3)^2
    x(1)+x(2)^2+x(4)-28
    x(1)+x(3)+x(4)^2-40
    x(3)^2+x(4)^2-64
    -x(1)
    -x(2)
    -x(3)
    -x(4)]
保存好又新建了个m文件输入:
rand('state',sum(clock))
x0=0;p0=0
tic
for i=1:10^6
    x1=floor(x),x2=ceil(x);
    [f,g]=mengte(x1);
    if sum(g<=0)==8
        if p0<=f
            x0=x1;p0=f
        end
    end
    [f,g]=mengte(x2)
    if sum (g<=0)==8
        if p0<=f
            x0=x2;p0=f
        end
    end
end
x0,p0
是不是不对?那第二个是不是应该在指令框内输入? 
还有我程序有没有问题呢?在线求达人指导
此外我还想知道如何把这2个程序连接起来

用matlab解非线性函数,刚入门的如题,我第一次用matlab,新建了个m文件编辑:function [f,g]=mengte(x);f=x(1)^2+2*x(2)+3*x(3)^3+x(4)^2-8g=[-x(1)^2+x(2)-x(3)^2 x(1)+x(2)^2+x(4)-28 x(1)+x(3)+x(4)^2-40 x(3)^2+x(4)^2-64 -x(
首先应该肯定,第一次用matlab写程序写到这个水准,应该算是相当不错的.不过,毕竟是第一次,问题当然也不少,后面细说.
第二个m文件保存好在命令窗口(Command Window,也就是你说的指令框)中运行即可.需要注意的是,MATLAB的m文件命名有要求——去掉扩展名“.m”之后的余下部分必须是一个合法的变量名,即以字母开始的字母、数字及下划线序列.
如果想把两个文件合并成一个文件,需要把第二段程序放在前面,并且在前面加上function xxx(xxx是函数名,任意自定),作为该M文件的主函数.
说一说程序存在的问题:
第2段程序的x未定义,我猜,那应该是你想要生成的随机数.
有多处语句没有使用分号(;)结束,计算时把结果在屏幕上回显,会导致速度很慢.
关于目标函数初值:p0的初值不适合设为0,因为你很难保证实际计算的目标函数比0更小.最稳妥的应该取p0的初值为无穷大(Inf).
关于判断条件:既然是求min,那么更好解的条件应该是p0>=f,你刚好写反了.
 
我有几个问题搞不清楚:
看到你在程序中对x求ceil和floor,你的问题是一个整数规划问题吗?
你使用蒙特卡洛法求解的话,随机数应该有范围的,但目前这一点不清楚.
你为什么要用蒙特卡洛法求解这个优化问题,而不是使用优化工具箱提供的函数呢?
 
对你程序做了一些修改,合并到一个m文件,代码如下:
function zd533612231

rand('state',sum(clock))
x0=0;p0=Inf;
tic
for i=1:10^6
    x=rand(1,4)*100;
    x1=floor(x);x2=ceil(x);
    [f,g]=mengte(x1);
    if sum(g<=0)==8
        if p0>=f
            x0=x1;p0=f
        end
    end
    [f,g]=mengte(x2);
    if sum (g<=0)==8
        if p0>=f
            x0=x2;p0=f
        end
    end
end
x0,p0 

function [f,g]=mengte(x)

f=x(1)^2+2*x(2)+3*x(3)^3+x(4)^2-8;
g=[-x(1)^2+x(2)-x(3)^2
    x(1)+x(2)^2+x(4)-28
    x(1)+x(3)+x(4)^2-40
    x(3)^2+x(4)^2-64
    -x(1)
    -x(2)
    -x(3)
    -x(4)];
 
 
运行得到结果(因为是随机的,不同次运行结果可能存在差别):
x0 =
     3     3     0     1
p0 =
     8
 

用matlab解非线性函数,刚入门的如题,我第一次用matlab,新建了个m文件编辑:function [f,g]=mengte(x);f=x(1)^2+2*x(2)+3*x(3)^3+x(4)^2-8g=[-x(1)^2+x(2)-x(3)^2 x(1)+x(2)^2+x(4)-28 x(1)+x(3)+x(4)^2-40 x(3)^2+x(4)^2-64 -x( 用matlab解非线性方程组用什么函数?同题, matlab怎么用fsolve函数解非线性方程组? 如何用matlab解非线性方程? 怎么用matlab解非线性方程组 matlab里计算非线性方程的函数有哪些 matlab 拟合一元非线性拟合 用什么函数? 用罚函数求以下非线性规划的最优解(附图)如图TAT 如何用matlab画出非线性函数的曲线?函数是:I=exp(V-I)-1想做出V从-1到1之间每隔0.01取一点的曲线,用matlab怎么做呢? 一个关于如何用matlab进行多元非线性回归的问题我现在只有4组数据 想通过matlab里面的多元非线性回归 得出一个成本模型 其中一个因变量 3个自变量 在matlab里面应该用哪个函数来对这4 lsqnonlin(解非线性最小二乘问题)怎么使用?我是个新手,最好有详细的教程,最好有例子啊,用MATLAB中的lsqnonlin函数来算, matlab解非线性方程问题 MATLAB基础问题麻烦高手帮个忙,请问解有约束非线性规划问题,用MATLAB中的哪个函数?再麻烦各位把函数的调用格式也写清楚吧, Matlab中solve解非线性方程组用的是什么算法?能否查看solve的源程序? Matlab解非线性微分方程组的问题要求解的方程组为:dx/dt=-x+y^2dy/dt=-2y+x^2x(0)=y(0)=1如何用Matlab解该方程组,并且画出相轨图(即x-y图象)?我用dsolve函数, 求用matlab解非线性方程组,可以复制的.求大神,高分悬赏 用matlab怎么求解含有三角函数的非线性方程中解x为多少? MATLAB用高斯消去法解非线性方程组的代码