我正在解决2个三次曲线的解析交集,其参数在下面的代码中的两个独立函数中定义.
通过绘制曲线,可以很容易地看出有一个交叉点:
缩放版:
但是,sym.solve没有找到交集,即在要求时print 'sol_ H_I(P) - H_II(P) =', sol,没有返回结果:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import sympy as sym
def H_I(P):
return (-941.254840173) + (0.014460465765)*P + (-9.41529726451e-05)*P**2 + (1.23485231253e-06)*P**3
def H_II(P):
return (-941.254313412) + (0.014234188877)*P + (-0.00013455013645)*P**2 + (2.58697027372e-06)*P**3
fig = plt.figure()
# Linspace for plotting the curves:
P_lin = np.linspace(-5.0, 12.5, 10000)
# Plotting the curves:
p1, = plt.plot(P_lin, H_I(P_lin), color='black' )
p2, = plt.plot(P_lin, H_II(P_lin), color='blue' ) …Run Code Online (Sandbox Code Playgroud) 给定两个函数,我想找出两条曲线的公切线:
公切线的斜率可以通过以下方式获得:
slope of common tangent = (f(x1) - g(x2)) / (x1 - x2) = f'(x1) = g'(x2)
Run Code Online (Sandbox Code Playgroud)
所以最终我们有一个由 2 个方程组和 2 个未知数组成的系统:
f'(x1) = g'(x2) # Eq. 1
(f(x1) - g(x2)) / (x1 - x2) = f'(x1) # Eq. 2
Run Code Online (Sandbox Code Playgroud)
由于某种原因我不明白,python没有找到解决方案:
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import sys
from sympy import *
import sympy as sym
# Intial candidates for fit
E0_init = -941.510817926696
V0_init = 63.54960592453
B0_init = 76.3746233515232
B0_prime_init = …Run Code Online (Sandbox Code Playgroud) 我有两组1__scatter_xyz.dat和2__scatter_xyz.dat散点。
这些点由 3 个坐标定义:x, y,z
1__scatter_xyz.dat: https://paste.ubuntu.com/25069931/
2__scatter_xyz.dat: https://paste.ubuntu.com/25069938/
这两组散点在一个区域内相交:
gnuplot> splot "1__scatter_xyz.dat" using 3:1:2 with points lt 1 title "1", "2__scatter_xyz.dat" using 3:1:2 with points lt 1 lc 2 title "2"
gnuplot> set xlabel 'x'
gnuplot> set ylabel 'y'
gnuplot> set zlabel 'z'
Run Code Online (Sandbox Code Playgroud)
的表面之间的交叉set 1与表面set 2将限定的线/曲线,在2D标绘y-x图,会给我们这两组之间的相界。
我想在2D绘制y-x图该线/曲线,从两个表面的交叉产生。
我思考如何解决这个问题的方式:
我们可以定义一个新函数,w = z_{1} - z_{2}。这两个表面之间的交叉点将是w = …
给出2个数字列表:
real_solutions_sols1 = [-53.2909210236, -8.31658000998, 1.87689837129, 1.4]
real_solutions_sols2 = [-21.1439685227, -19.2]
Run Code Online (Sandbox Code Playgroud)
我想相同的代码重写名单,使它们包含之间数字0.1和4.0:
real_solutions_sols1 = [ 1.87689837129, 1.4]
Run Code Online (Sandbox Code Playgroud)
对于第二个列表,这是不可能的,所以我希望代码返回完整列表:
real_solutions_sols2 = [-21.1439685227, -19.2]
Run Code Online (Sandbox Code Playgroud)
以下代码适用于real_solutions_sols2:
real_roots_zero_to_four = []
for i in real_solutions_sols2:
if (i >= 0.1) and (i <= 4.0):
real_roots_zero_to_four.append(i)
else:
real_roots_zero_to_four = real_solutions_sols2
print 'real_roots_zero_to_four = ', real_roots_zero_to_four
Run Code Online (Sandbox Code Playgroud)
该if条件未得到满足,所以我们跳转到else的语句.
real_roots_zero_to_four = [-21.14396852,-19.2]
但是,对于第一个列表,它无限循环:
real_roots_zero_to_four = []
for i in real_solutions_sols1:
if (i >= 0.1) and (i <= 4.0):
real_roots_zero_to_four.append(i)
else: …Run Code Online (Sandbox Code Playgroud) 鉴于以下变量:
a_4th = 6.08
delta_a = 0.052
Run Code Online (Sandbox Code Playgroud)
我想创建一个包含以下内容的列表:
a = [a_4th, a_5th, a_6th, a_7th ... ]
Run Code Online (Sandbox Code Playgroud)
哪里:
a_5th = a_4th + delta_a
a_6th = a_5th + delta_a
a_7th = a_6th + delta_a
Run Code Online (Sandbox Code Playgroud)
这段代码:
a = [] # create the empty list
a.insert(0, a_4th) # initialize the 1st item of the list
for i in xrange (1,19): # I would like the list to be 18 items long.
# a[0] is defined in the previous line.
a[i] = a[i-1] + delta_a …Run Code Online (Sandbox Code Playgroud) python ×5
list ×2
matplotlib ×2
scipy ×2
sympy ×2
append ×1
for-loop ×1
if-statement ×1
numpy ×1
python-2.7 ×1