Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何计算2变量非线性方程或在Python中将这些方程绘制在图形上?_Python_Math - Fatal编程技术网

Python:如何计算2变量非线性方程或在Python中将这些方程绘制在图形上?

Python:如何计算2变量非线性方程或在Python中将这些方程绘制在图形上?,python,math,Python,Math,我希望从两个非线性方程中得到一些解(x和y)。 所以我写了一些代码,插入了方程,但它不起作用 据我所知,问题是在f2=math.acos(~~~~)处生成的,即“ValueError:math domain error” (实际上,当我删除math.acos时,它们会显示一些错误但具体的解决方案。) 所以,我想请你帮我指路, (1) 我是如何得到‘f1=~’,‘f2=~’作为x,y的某些解的。 (2) 我如何为‘子方程=~’和‘f1=~’绘制一些曲线图 我真的在寻求帮助。多谢各位 from sc

我希望从两个非线性方程中得到一些解(x和y)。 所以我写了一些代码,插入了方程,但它不起作用

据我所知,问题是在f2=math.acos(~~~~)处生成的,即“ValueError:math domain error” (实际上,当我删除math.acos时,它们会显示一些错误但具体的解决方案。)

所以,我想请你帮我指路, (1) 我是如何得到‘f1=~’,‘f2=~’作为x,y的某些解的。 (2) 我如何为‘子方程=~’和‘f1=~’绘制一些曲线图

我真的在寻求帮助。多谢各位

from scipy.optimize import fsolve
import math
import numpy as np
import matplotlib.pyplot as plt




###Input###
Angle = 120.0
length_Porpyrin =18.6
length_linker = 12.5
###parameter###
length_1 = length_Porpyrin/2.0
lenght_2 = length_linker/2.0
delta = np.pi*Angle/180.0/2.0
ramda = 30.18/180.0*np.pi
bond_angle = 2.0*np.pi/3.0
length_d = 1.35



def equations(p):
    x,y = p
    ### modified Variable ###
    atr1 = np.arctan(length_1 / x)
    atr2 = np.arctan(lenght_2 / y)
    sub_equation = ( length_d ** 2+(y/np.cos(np.arctan(lenght_2 / y))) ** 2-(x/np.cos(np.arctan(length_1 / x))) ** 2 )*np.cos(np.arctan(lenght_2 / y)) / ( 2 * length_d * y )
    ##########################
    f1 = (  (x/np.cos(np.arctan(length_1 / x))) ** 2 + (y/np.cos(np.arctan(lenght_2 / y))) ** 2 - 2 *( x/np.cos(np.arctan(length_1 / x))) * (y/np.cos(np.arctan(length_1 / x))) *  np.cos(ramda-np.arctan(length_1 / x)-np.arctan(lenght_2 / y))  ) - length_d ** 2
    f2 = math.acos(sub_equation)  -  ( bond_angle -(np.pi-np.arctan(lenght_2 / y)-delta))
    return (f1, f2)


solution = fsolve(equations, (25,25))
radius1 = solution[0]
radius2 = solution[1] 


print('[solution]')
print(solution)
print('radius1', radius1)
print('radius2', radius2)

我认为错误可能在于,当您使用反向触发器函数(如arccos(acos)、arcsin(asin))时。某些反向触发器函数具有域,如果碰巧插入了一个值,即该值超出了该域,则将导致域错误

以下是每个反向触发函数的域(R=所有实NUM):


因此,解决方案是对可以输入到反(弧)函数中的参数设置某种界限。或者可以尝试使用try-except块处理异常。下面是Python文档:
https://docs.python.org/3/tutorial/errors.html
(请参阅第8.3节)。

斯隆戈已经解释了错误的含义:
math.acos()
是使用大于1或小于-1的参数调用的,这种情况永远不会发生

换句话说:尝试直接绘制
子方程
的值——该值应始终保持在[-1;1]范围内。如果没有,那么可能是出了问题,或者是你对
子方程的定义有问题,或者是你输入的变量值有问题


我假设你知道这些方程和各个术语的含义,因此如果
sub_方程的定义有错误,但你不容易找到,我建议你看看它的各个部分:分别定义和绘制它们,看看哪些是你期望的,哪些不是。

谢谢你,扎克。是的,我明白了,也许惰性项应该限制在[-1,1]。但是,如何。。我已经搜索了相当多的网页,但它不起作用。@Dasol,如果你的方程式可以产生一个超出[-1,1]的数字,这意味着它可能有错误。这意味着它要么没有正确地派生,要么实现错误。我的建议是你画出子方程,然后检查这些数字是否有意义。是的,我明白了。我需要将math.acos()的内部项绑定到[-1,1]。但是怎么做呢?定义每个方程和变量(x,y)。它会犯一些错误。