【问题标题】:Matlab Solve System of Equations with Quantized VariablesMatlab求解具有量化变量的方程组
【发布时间】:2012-03-13 07:28:26
【问题描述】:

我正在尝试使用solve()来求解以下形式的方程组

eq1=a1x+a2y;
eq2=b1x+b2y;

其中a1 = .05 的值为x<5,0.1 的值为5

有没有办法使用solve来解决这个问题?如sol = solve(eq1,eq2);

【问题讨论】:

  • 你为什么不分析解决它?应该很容易查看是否存在任何解决方案以及是否一致。

标签: matlab equation-solving


【解决方案1】:

我不确定你想在这里做什么。您能否发布一个真实示例(带数字)以及您希望输出的内容?


我认为您正在尝试求解线性联立方程。假设这就是你想要做的:

我建议将你所有的方程乘以 20,这样你的最小量子大小 0.05 就变成了 1.00。然后,您的问题就变成了整数值的线性方程组的解。

请注意,如果系统是完全约束的(即,如果您要求解的 n 个方程上有 n 个独立约束),那么将只有一个解,它不一定是整数解。例如系统:

1 = 2a + 4b
3 =  a +  b

有解决方案a = 5.5b = -2.5。没有其他解决方案。

对于约束不足的系统,即

0 = 3x + y
x > 0

然后会有无数个解,其中一些可能同时具有xy 是整数值。 (或者可能根本没有整数解。)

【讨论】:

  • 我应该用不同的方式表达我的问题,函数是分段函数。我想出了如何以方程形式放置分段函数,但在 matlab 求解时遇到问题。我正在使用以下代码分段定义我的方程 eq3 = m-['(heaviside(x)-heaviside(x-1))*x^3/6 '];虽然我遇到了该代码的问题,但我也尝试了这种分段定义的方法 eq1 = -m+... (0 ) .* (x = 3/2 );
  • @user1265868:如您所见,StackOverflow 不允许在 cmets 中正确格式化(这会使您的代码看起来一团糟。)您能否修改您的问题以包含这些新信息?
【解决方案2】:

好的,让我给你一个简要的介绍。

如果你想求解一个方程或方程组和条件,那么你需要这样定义它们,所以让我解释一下。 举个例子

clear all; %just to be safe
syms x y b 
a=0.5;
somevalue=1;
someothervalue=3;
eq1= a*x+a*y == somevalue; %this is your first equation
eq2= b*x+b*y == someothervalue; %this is your 2nd equation
cond1= x<5; %this is a condition which matlab sees as an "equation"
eqs=[eq1,eq2,cond1]; %these are the equations and conditions you want to solve for, use this for solve
eqs=[eq1,eq2]; %use this for vpasolve and set your condition in range
vars=[x,y,b]; %these are the variable you want to solve for
range = [-Inf 5; NaN NaN; NaN NaN]; %NaN means you set no range

%you can use solve or vpasolve, second one being numeric, which is the one you'll probably want
n=5;
sol=zeros(n,numel(vars));
for i = 1:n 
    temp1 = vpasolve(eqs, vars, range, 'random', true);
    temp = vpasolve(eqs, vars, 'random', true);
    sol(i,1) = temp.x;
    sol(i,2) = temp.y;
    sol(i,3) = temp.b;
end
sol

现在,当我自己运行此程序时,由于某种原因,我无法使范围正常工作,仍在试图解决这个问题。当您不设置范围时,它可以正常工作,如果您可以使用求解功能,那么也没有问题。 从理论上讲,范围函数应该像这样正常工作,所以这可能是我的一个错误。

如果你使用solve,你有一些不错的选项,你可以使用assume来设置更高级的额外条件,比如只检查真正的解决方案或只检查整数等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多