当我使用大长度的梁(管道)时,我在使用scipy.solve_ivp解决偏转曲线时遇到了失败。以下是我的脚本。

# -*- coding: utf-8 -*-

#
# Calculate deflection curve under gravity
#

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt


# round pipe's sectional area
def area_round(D,t):
    d = D - 2 * t
    return np.pi*(D*D-d*d)/4.0

# area moment of inertia section properties of round pipe
def moi_round(D,t):
    d = D - 2 * t
    return np.pi/64.0*(D**4-d**4)

# gravity force per unit length for round pipe
def G_round(dens,D,t):
    g = 9.8  # gravity coef, N/kg
    A = area_round(D,t)
    return A*dens*g

# Calculate 2D plane(xy) bending of a beam undering self-gravity
# minus y is the gravity direction
# - Young's modules E
# - area moment of inertia: Iz

# x: coordinate position along x-axis
# u=[y,dydx]: deflection at y direction , first order derivative on x
def deflection(x,u,E,Iz,G,LG):
    y,dy_dx = u
    MG = np.select([x<=LG,x>LG],[G*(0.5*LG**2+0.5*x**2-LG*x),0])   # distributed force    
    ddy_ddx = np.power(1.0+dy_dx*dy_dx,3.0/2.0)*MG/E/Iz
    return [dy_dx,ddy_ddx]

# solve initial value problem using numerical method
# Given x list, calcuate y and y'
def solve_deflection(E,Iz,Gy,Lg,x_list):
    # initial value
    y0 = 0.0
    dy_dx_x0 = 0.0
    sol = solve_ivp(deflection,t_span=[0.0,Lg],y0=[y0,dy_dx_x0],method='RK45',t_eval=x_list,vectorized=True,args=(E,Iz,Gy,Lg),rtol=1.0e-3,atol=1.0e-4)
    print("sol:",sol)
    return sol.y[0,:],sol.y[1,:]

    
# test of solving deflection equation
# unit sytem: length mm force:N pressure:N/mm^2/MPa
def test():
    dens = 7880.0e-9  # Kg/mm^3
    E = 210e3    # elastic modulus, N/mm^2
    
    # round pipe
    Dp = 60.0  # mm, outer diameter
    tp = 3.0  # mm ,thickness
    print("Dp:",Dp,' tp:',tp)
    
    Iz= moi_round(Dp,tp)      # section const
    Gy = -G_round(dens,Dp,tp)     # gravity force per unit 
    print(" Iz:",Iz,' Gy:',Gy)

    # Lg = 10000.0 # mm,  this length is OK
    Lg = 20000.0  # mm, this length leads to failure
    
    print("Lg=",Lg)


    xlist = np.linspace(0.0,Lg,num=100,endpoint=True)    
    
    res = solve_deflection(E, Iz, Gy=Gy, Lg=Lg, x_list=xlist)
    plt.plot(xlist,res[0])
    plt.show()
    
    

if __name__ == '__main__':
    test()
    pass




当长度为10000mm时,可以给出正确的结果,如下图enter image description here所示

但当我将其更改为20000mm时,它失败并输出以下消息:,

sol:   message: 'Required step size is less than spacing between numbers.'
     nfev: 944
     njev: 0
      nlu: 0
      sol: None
   status: -1
  success: False
        t: array([   0.        ,  202.02020202,  404.04040404,  606.06060606,
        808.08080808, 1010.1010101 , 1212.12121212, 1414.14141414,
       1616.16161616, 1818.18181818, 2020.2020202 , 2222.22222222,
       2424.24242424, 2626.26262626, 2828.28282828, 3030.3030303 ,
       3232.32323232, 3434.34343434, 3636.36363636, 3838.38383838,
       4040.4040404 , 4242.42424242, 4444.44444444, 4646.46464646,
       4848.48484848, 5050.50505051, 5252.52525253, 5454.54545455,
       5656.56565657, 5858.58585859, 6060.60606061, 6262.62626263,
       6464.64646465, 6666.66666667, 6868.68686869, 7070.70707071,
       7272.72727273, 7474.74747475, 7676.76767677, 7878.78787879,
       8080.80808081, 8282.82828283, 8484.84848485, 8686.86868687,
       8888.88888889])
 t_events: None
        y: array([[ 0.00000000e+00, -3.66155907e+00, -1.45618988e+01,
        -3.25951385e+01, -5.76794150e+01, -8.97565181e+01,
        -1.28794030e+02, -1.74786625e+02, -2.27730361e+02,
        -2.87640987e+02, -3.54556806e+02, -4.28538678e+02,
        -5.09670018e+02, -5.98056798e+02, -6.93827544e+02,
        -7.97133338e+02, -9.08147821e+02, -1.02706718e+03,
        -1.15411018e+03, -1.28951811e+03, -1.43356488e+03,
        -1.58659673e+03, -1.74895654e+03, -1.92104924e+03,
        -2.10335332e+03, -2.29642078e+03, -2.50087718e+03,
        -2.71742163e+03, -2.94684282e+03, -3.19021861e+03,
        -3.44843893e+03, -3.72265946e+03, -4.01447603e+03,
        -4.32592470e+03, -4.65948174e+03, -5.01806360e+03,
        -5.40502733e+03, -5.82494500e+03, -6.28452879e+03,
        -6.79299154e+03, -7.36408180e+03, -8.02047137e+03,
        -8.80421033e+03, -9.81478548e+03, -1.15113253e+04],
       [ 0.00000000e+00, -3.61399978e-02, -7.16869806e-02,
        -1.06770973e-01, -1.41512819e-01, -1.76024795e-01,
        -2.10415154e-01, -2.44799321e-01, -2.79258778e-01,
        -3.13875788e-01, -3.48738932e-01, -3.83943102e-01,
        -4.19589504e-01, -4.55785660e-01, -4.92645404e-01,
        -5.30288885e-01, -5.68842566e-01, -6.08439223e-01,
        -6.49217947e-01, -6.91324142e-01, -7.34921284e-01,
        -7.80235186e-01, -8.27461362e-01, -8.76842769e-01,
        -9.28683414e-01, -9.83348358e-01, -1.04126372e+00,
        -1.10291665e+00, -1.16888799e+00, -1.24022057e+00,
        -1.31734604e+00, -1.40101902e+00, -1.49267854e+00,
        -1.59444811e+00, -1.70913565e+00, -1.84023352e+00,
        -1.99191927e+00, -2.17052401e+00, -2.38680965e+00,
        -2.65797898e+00, -3.01398821e+00, -3.51651158e+00,
        -4.31409773e+00, -5.92506745e+00, -1.41760305e+01]])
 y_events: None
Traceback (most recent call last):

  File "mwe.py", line 82, in <module>
    test()

  File "mwe.py", line 76, in test
    plt.plot(xlist,res[0])

  File "\lib\site-packages\matplotlib\pyplot.py", line 3019, in plot
    return gca().plot(

  File "\lib\site-packages\matplotlib\axes\_axes.py", line 1605, in plot
    lines = [*self._get_lines(*args, data=data, **kwargs)]

  File "\lib\site-packages\matplotlib\axes\_base.py", line 315, in __call__
    yield from self._plot_args(this, kwargs)

  File "\lib\site-packages\matplotlib\axes\_base.py", line 501, in _plot_args
    raise ValueError(f"x and y must have same first dimension, but "

ValueError: x and y must have same first dimension, but have shapes (100,) and (45,)

我读过关于solve_ivp错误的类似问题:“所需步长小于数字之间的间距。”但我不能理解。

我也尝试了不同的环礁价值,但无法解决这个问题。我为此奋斗了好几天。

有人能帮我吗?非常感谢。

使用scipy.solve_ivp错误解决偏转曲线:';所需步长小于数字之间的间距'的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 如何扩展ATmega324PB微控制器的以下宏寄存器?

    我目前正在学习嵌入式,我有以下练习:展开以下宏寄存器:如果有人解决了这个问题,我将不胜感激,以便将来参考

  2. Python将ONNX运行时设置为返回张量而不是numpy数组

    在python中,我正在加载预定义的模型:然后我加载一些数据并运行它:到目前为止,它仍在正常工作,但我希望它默认返回Tensor列表,而不是numpy数组。我对ONNX和PyTorch都是新手,我觉得这是我在这里缺少的基本内容。这将使转换中的一些开销相同。

  3. 在macOS上的终端中使用Shell查找文件中的单词

    我有一个文本文件,其中有一行:我需要找到ID并将其提取到变量中。我想出了一个RexEx模式:但它似乎对我尝试过的任何东西都不起作用:grep、sed——不管怎样。我的一个尝试是:我为这样一个看似愚蠢的问题感到抱歉,但我在互联网上找不到任何东西:我在SO和SE上读了几十个类似的问题,并在谷歌上搜索了几个教程,但仍然无法找到答案。欢迎提供任何指导!

  4. react-chartjs-2甜甜圈图中只有标题未更新

    我正在使用react-chartjs-2在我的网站中实现甜甜圈图。下面是我用来呈现图表的代码。我将甜甜圈图的详细信息从父组件传递到子组件,所有道具都正确传递。当我在beforeDraw函数外部记录props.title时,它会记录正确的值,但当我在beforeDraw函数内部记录props.title时,它将记录标题的前一个值,从而呈现标题的前值。我在这里做错了什么?

  5. 如何在tkinter中使用Python生成器函数?

    生成器函数承诺使某些代码更易于编写。但我并不总是知道如何使用它们。假设我有一个斐波那契生成器函数fib(),我想要一个显示第一个结果的tkinter应用程序。当我点击“下一步”按钮时,它会显示第二个数字,依此类推。我如何构建应用程序来实现这一点?我可能需要在线程中运行生成器。但如何将其连接回GUI?

  6. 如何为每次提交将存储库历史记录拆分为一行?

    我正在尝试获取存储库的历史记录,但结果仅以单行文本的形式返回给我。

  7. 尝试在颤振项目上初始化Firebase时出错

    当尝试在我的颤振项目上初始化firebase时,我收到了这个错误有人知道我能做什么吗?应用程序分级Gradle插件Gradle项目颤振相关性我已经将firebase设置为Google文档已经在另一个模拟器上尝试过,已经尝试过创建一个全新的模拟器,已经在不同的设备上尝试过了,已经尝试了特定版本的firebase,已经尝试添加但没有任何效果,已经在youtube上看到了关于它的每一个视频,该应用程序在android和iOS两个平台上都抛出了这个错误

  8. 在unix中基于当前日期添加新列

    我试图在unix中基于时间戳列在最后一个单元格中添加一个状态列。我不确定如何继续。

  9. 麦克斯·蒙特利。我一直得到UncaughtReferenceError:当我在终端中写入node-v时,节点未定义

    如果这是您应该知道的,请确认:我已将所有shell更改为默认为zsh。当我在终端中写入node-v时,我一直收到“UncaughtReferenceError:nodeisnotdefined”。但它显示节点已安装。我是个新手,在这方面经验不足。

  10. 如何在前端单击按钮时调用后端中的函数?

    那么如何在后端添加一个新的端点,点击按钮调用这个函数。

返回
顶部