我正在尝试使用solve()来求解以下形式的方程组
eq1=a1x+a2y;
eq2=b1x+b2y;
其中a1 = .05
对于 的值x<5
,对于 5 的值,为 .1
有没有办法使用solve来解决这个问题?如在sol = solve(eq1,eq2);
我正在尝试使用solve()来求解以下形式的方程组
eq1=a1x+a2y;
eq2=b1x+b2y;
其中a1 = .05
对于 的值x<5
,对于 5 的值,为 .1
有没有办法使用solve来解决这个问题?如在sol = solve(eq1,eq2);
我不确定你想在这里做什么。您能否发布一个真实示例(带数字)以及您希望输出的内容?
我认为您正在尝试求解线性联立方程。假设这是你想要做的:
我建议将你所有的方程乘以 20,这样你的最小量子大小0.05
就变成了1.00
。然后,您的问题将成为整数值的线性方程组的解。
请注意,如果系统是完全约束的(即,如果您要求解的n 个方程有n 个独立约束),那么将只有一个解,并且不一定是整数解。例如系统:
1 = 2a + 4b
3 = a + b
有解决办法a = 5.5
,b = -2.5
。没有其他解决方案是可能的。
对于欠约束系统,即
0 = 3x + y
x > 0
然后将有无限数量的解决方案,其中一些可能同时x
具有y
整数值。(或者可能根本没有整数解。)
好的,让我给你一个快速的纲要。
如果你想求解一个方程或方程组和条件,那么你需要这样定义它们,所以让我解释一下。所以举个例子
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来设置更高级的额外条件,比如只检查真正的解决方案或只检查整数等。