2016-03-08 100 views
0

我想问一下高效算法。 实施例ⅰ具有方程:方程的高效算法

x = y + z; 

如果变量y = 1的值,变量z = 2所以变量x是3

但如何自动如果变量x = 3和变量得到的Y值用这个方程z = 2?无需创建新的等式y = x - z

我希望可以使用C#或JavaScript获取示例代码。

又如,如果方程是

a = (((x + y - z)/2)*10)^4 

方程式从程序,用户提交的3个可变因素值。 用户提交变量(X,Y,Z)或(Y,Z,a)或(Z,A,X)或(a,X,Y)

如果变种的x,y和z的用户输入值,程序可以用该方程显示a的值。没有创建一个= ...

如果var y,z和a的用户输入值,程序可以用该等式显示x的值。如果没有创建x = ...

如果var z,a和x程序的用户输入值可以用该方程显示y的值。没有创建y = ...

如果用户为var a,x和y输入值,程序可以用该等式显示z的值。如果没有创建Z = ...

+0

使用'if'或'switch'语句? – user1666620

+1

这个公式是否会改变(硬编码或动态)?用户是否提交了一个等式?如果是这样,是否需要执行方程的错误检查(准确的括号,指数等)。) – Jon

+0

@Jon:我编辑了新的解释,方程是从程序,用户不能改变,用户只是提交变量的值 –

回答

-2

回答第一个问题:

Y = X - Z 

是唯一可能的解决方案。没有其他的方法来计算Y. 这是因为计算机不能求解方程式(或更好的方法,它们可以被编程来解决它们,但只使用'Y = X-Z'),它们可以改变变量。在这种情况下,我们将Y值设置为(X-Z)值。

回答了第二个问题:

你能解决这个等式做

X = fourth square of (...) 

,或者您可以使用自己做这一切工作的库,例如“计算机代数系统”(由@又引FrankPuffer)

当然:你可以求解反函数的方程,如'Y = X-Z',或者使用简化写代码的库。

+0

感谢您的回复,我用新示例编辑了我的问题 –

+0

这不是问题的答案,如果您在发表评论时不明白问题,并且您没有发布必要的代表评论,等待别人发表澄清的评论 –

+0

@KevinWells对不起......但这是第一个问题的回答......他稍后编辑它...... – EnricoBilla

-1

这不是它的工作原理。在编程语言中,你并没有方程式,而是分配。您可以为左侧的变量分配右侧的值。

因此获得Y中的唯一途径,有X和Z时是通过运行

y = x - z 

编辑:您可能希望创建类似

myFunction(double? x=null, double? y=null, double? z=null, double? a=null) 

然后里面你检查哪些变量为空(所以不用),并相应地执行你的计算。你可以运行它像这样

var something = myFunction(x: 1, y: 2, a: 3) 
0

你必须相对于未知变量来解决方程:

x = y + z; 

相当于

y = x - z; 

z = x - y; 

对于第二个方程式比较困难。如果一个< 0将不会有解决方案。否则,您可以先取第4个根:

a = (((x + y - z)/2)*10)^4 <=> sqrt(sqrt(a)) = +/- (x + y + z) * 5 

然后针对x,y或z对其进行解析。请注意,您一般会得到两个解决方案。

有些程序和库可以自动完成这些计算:检查“符号数学”或“计算机代数系统”。

-1

如果你不想写新的代码行,并获得“Y”时,“X”是一样的方程式中diferent为零,试试这个结果......

// equation : x = y + z 
var x=3,y=0,z=2; 
x = ((x!=0) ? (x-z) : y) + z; 
console.log("Result : "+ x); 

// or saving the value in 'y' 
x = ((x!=0) ? y = (x-z) : y) + z; 
console.log("Result 2 : "+ x); 
0

我感觉到你提出这个问题的数学的深入研究,可以检索算法对谷歌有关equation algorithm solve,若您有一些基本算法的简单工作流维基百科

是的链接,找到一个变量

让利我们假设这个环境; 因为总是会有三个变量,所以您可以确定只有三个变量为空,然后选择要查找的变量的等式(如果非为空),那么您发送的消息中没有值为空

原来的公式是X = Y + ZA

x=5; y=7; z=2; a=null; 

If (!x.hasValue()){ 
x= y + z - a; 
} 
.... 
Else if (!a.hasValue()){ 
a = -(x + y + a); 
}Else{Console.Write("Don't give value to all variable");} 
1

你要找的是一个 '求解器'。这不是微不足道的,有很多关于这方面的研究,一些着名的大型数学软件可以做到这一点。

欲了解更多详情,请谷歌'计算机代数算法'。

+0

好吧,你抓住我的问题。那么,我必须为每个想要获得该值的变量手动创建方程式?谢谢 –

+0

这似乎是最简单的方法。方程求解器并不重要,为了您的目的,您可能需要的仅仅是一组多个方程。有些方程甚至可能不可解,有许多这样的复杂因素可能对您的需求无关紧要。 – user1952500