假设我有以下等式:
x + 2y + 3z = 20
2x + 5y + 9z = 100
5x + 7y + 8z = 200
Run Code Online (Sandbox Code Playgroud)
如何解决这些方程x
,y
和z
?如果可能,我想使用R或任何其他计算机工具来解决这些方程式.
我正在编写一个函数来解决任意数量的联立方程.方程的数量由函数的一个参数设置,每个方程由许多符号构成 - 与方程一样多的符号.这意味着我不能简单地对方程式进行硬编码,甚至不需要将方程组合在一起所需的符号; 该函数需要能够处理任意数量的方程.所以,我的问题是,我如何生成符号列表?
我有一个可能的解决方案,但我的直觉告诉我,它不会非常有效.如果有更好的方法,请告诉我.
我是SymPy的新手,我仍然在摸索着.据我所知,符号需要用字符串定义.因此,我可以通过在字母上添加递增数字(例如't0','t1'等)来生成一系列字符串,将它们添加到列表中,然后使用这些字符串作为参数创建符号.这些符号本身将存储在列表中,并用于生成方程式.
def solveEquations(numEquations):
symbolNameList = []
symbolList = []
equationList = []
for i in range(numEquations):
name = 't' + str(i)
symbolNameList.append(name)
symbolList.append(Symbol(name))
for i in range(numEquations):
equation = 0
for sym in symbolList:
equation += sym ** i # Or whatever structure the equation needs
equationList.append(equation)
#Then go on to solve the equations...
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗,还是有更有效的方法?
我最近重新发现了Roman Maeder的一个小包,它告诉Mathematica自动在算术和类似函数上进行线程,例如x == y.链接到Maeder的包裹.
首先,为了演示,这是Maeder给出的一个例子:
In[1]:= Needs["EqualThread`"]
Run Code Online (Sandbox Code Playgroud)
现在继续使用线程行为来解决x'手动'的以下等式:
In[7]:= a == b Log[2 x]
In[8]:= %/b
Out[8]:= a/b == Log[2 x]
Run Code Online (Sandbox Code Playgroud)
取指数:
In[9]:= Exp[%]
Out[9]= E^(a/b) == 2 x
Run Code Online (Sandbox Code Playgroud)
除以2:
In[10]:= %/2
Out[10]= (E^(a/b))/2 == x
Run Code Online (Sandbox Code Playgroud)
问:从设计角度来看,有人可以解释为什么Mathematica默认设置为这样吗?自动线程似乎是Mathematica初学者所期望的行为类型 - 至少对我来说 - 也许某人可以提供一个或两个会导致整个系统出现问题的例子.(并随意指出任何mathematica无知...)
求解下面两个未知数的两个方程组的系统:
a1,b1,c1,a2,b2和c2由用户自己输入.
我一直试图找到问题的数学解决方案,我似乎无法走远...
到目前为止我尝试过的是:
这是正确的还是有更简单的方法来做到这一点?
当前代码:
#include <iostream>
using namespace std;
int main()
{
int a1, b1, c1, a2, b2, c2;
cout << "Enter the values for the first equation." << endl;
cout << "Enter the value for a1" << endl;
cin >> a1;
cout << "Enter the value for b1" << endl;
cin >> b1;
cout << "Enter the value for c1" << endl;
cin >> c1;
cout << "Enter the values for …
Run Code Online (Sandbox Code Playgroud) 在我正在编码的C++应用程序中,我需要求解一个非线性方程组(N方程,N个未知数).
我正在解决的系统相当小(最多10个方程/未知数),因此性能不会成为真正的问题.我在网上搜索了一些非线性解算器库,我无法找到一些看起来很容易使用的东西(得到了NOX和C/C++ Minpack,但似乎对我的需求来说都是一种矫枉过正) .
为此目的,易于使用的库的任何想法和想法?
给定一个字符串形式的表达式,求解x.表达式中x的最高幂将等于1.允许的运算符为+,*和 - .这些都是二元运算符.因此,2x将被写为2*x.每个操作员后面都会跟一个单词或一个常数.
例如,请考虑以下等式:
2*X + 5-(4*X-7 +(4-2))= 10*X-9
这是一个完全有效的方程式.形式1*2*3的表达式无效,但1*(2*3)有效.
给定这样的等式,我们需要找到x的解决方案.如果等式无效,程序应显示错误消息.
有人可以解释如何解决这个问题吗?我现在唯一想到的就是使用Context Free Grammars进行词法分析和解析.但我觉得有一个比这更简单的解决方案.有人可以对它有所启发吗?
我需要帮助来解决这个公式((n * 2) + 10) / (n + 1) = 3
,最好是在PHP中.(数字2,10和3应该是可以更改的变量.)
我很容易在纸上解决这个等式.但是,当我尝试在PHP中实现它时,我不知道从哪里开始.我已经在这里完成了几个谷歌查询和搜索,似乎没有任何帮助.我错过了处理这个问题的正确方法.
任何提示和指示都会很棒,如果你提供确切的代码,请解释你如何得到这个结果.
我开始创建一个用抽象代数做事的库.现在我正在尝试创建一个检查集合是否为组的函数.它应该是不言自明的:
在数学中,一个群体是一组元素,同时结合了任何两个元素的运算,形成满足四个条件的第三个元素,称为群组公理,即闭包,关联性,同一性和可逆性.组中最熟悉的一个例子是整数集和加法运算; 任何两个整数的加法形成另一个整数.(http://en.wikipedia.org/wiki/Group_(mathematics))
#include <set>
#include <iostream>
template <typename ObType, typename BinaryFunction>
bool isGroup(const std::set<ObType> & S, BinaryFunction & op)
{
/*
isGroup returns true or false depending on whether the set S
along with the operator op is a group in the Algebraic sense.
That is, S is a group if and only if all the 4 following
conditions are true:
(1) If a, b in S, then a op b in S
(2) If a, …
Run Code Online (Sandbox Code Playgroud) 没有直接的例子,这有点难以解释.因此,让我们以非常简单的理想气体定律为例.对于正常情况下的理想气体,下列等式成立:
PV = RT
Run Code Online (Sandbox Code Playgroud)
这意味着如果我们知道4个变量中的3个(压力,体积,特定气体常数和温度),我们可以解决另一个变量.
我怎么把它放在一个物体里?我想有一个对象,我可以插入3个变量,然后计算第4个.我想知道这是否可以通过属性来实现?
我目前最好的猜测就是插入它:
class gasProperties(object):
__init__(self, P=None, V=None, R=None, T=None)
self.setFlowParams(P, V, R, T)
def setFlowParams(self, P=None, V=None, R=None, T=None)
if P is None:
self._P = R*T/V
self._V = V
self._R = R
self._T = T
elif V is None:
self._V = R*T/P
self._P = P
self._R = R
self._T = T
#etc
Run Code Online (Sandbox Code Playgroud)
虽然这很麻烦,而且容易出错(我必须添加检查以确定其中一个参数设置为"None").
有更好,更清洁的方式吗?
我看到这种"问题"经常以各种各样的方式发生,特别是一旦变量数量增加(增加密度,雷诺数,混合粘度),不同if语句的数量就会快速增长.(IE如果我有8个变量,任何5个使系统唯一,我需要8 nCr 5 = 56 if语句).