質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

767閲覧

運動方程式をPythonで解きたいです

nonnon615

総合スコア19

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/10 04:52

import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt import csv import os import glob import pandas as pd import math import cv2 Vr = 1 π = math.pi m = 0.0156 Cn = 6.83879 D = 0.016 H = 0.04 L = 0.3 ρ = 1.18 M = (m/(ρ*H*D*L))*(D/H) CL = 0.5 C = (4*π*Cn)/Vr F = CL/(2*M) # mk system def func(state,t, m, k, FL): x1, x2 = state dx2dt = - 2 * (Cn/m) * x2 - (k/m) * x1 + FL/m return [x2, dx2dt] m = Vr/(2*π) # 質量[kg] k = 1 # 剛性[N/m] FL = (ρ*(H*H)*L*CL)/2 state0 = [0.0, 0.1] # 初期値[x0, v0] t0 = 0 # 初期時間[s] tf = 1 # 終了時間[s] dt = 0.005 # 時間刻み[s] t = np.arange(t0, tf+dt, dt) # 時間軸配列 # odeintを使った解法 # x1, x2の解を求めているので、sol[0]が変位x1, sol[1]が速度x2となる sol = odeint(func, state0, t, args=(m,k)) print(sol) omega = np.sqrt(k/m) theory = (state0[0] * omega * np.cos(omega * t)) +\ ((state0[1]/omega) * np.sin(omega * t)) # ここからグラフ描画 # フォントの種類とサイズを設定する。 plt.rcParams['font.size'] = 14 plt.rcParams['font.family'] = 'Times New Roman' # 目盛を内側にする。 plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' # グラフの上下左右に目盛線を付ける。 fig = plt.figure() ax1 = fig.add_subplot(111) ax1.yaxis.set_ticks_position('both') ax1.xaxis.set_ticks_position('both') # 軸のラベルを設定する。 ax1.set_xlabel('Time [s]') ax1.set_ylabel('Displacement [m]') # データの範囲と刻み目盛を明示する。 ax1.set_xticks(np.arange(0, 2, 0.2)) ax1.set_yticks(np.arange(-1, 1, 0.001)) ax1.set_xlim(0, 1) ax1.set_ylim(-0.005, 0.005) # データプロット ax1.plot(t, sol[:,0], label='Python odeint [x0=0, v0=0.1]', c='b', marker='o', linestyle='None') ax1.plot(t, theory, label='Theory', c='r') fig.tight_layout() plt.legend(loc='upper left') # グラフを表示する。 plt.show() plt.close()

上記のようなばねマスダンパ系の運動方程式を解きたいです.
しかし,下記のようにエラーが出てしまいました.
どのように改良したらよいでしょうか?

また,x2の初期値をt=Vr/4のときに0にしたいのですが,どのように改良したらよいでしょうか?

TypeError: func() missing 1 required positional argument: 'FL'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sol = odeint(func, state0, t, args=(m,k))

sol = odeint(func, state0, t, args=(m,k,FL))

にするのでしょう。

投稿2021/07/10 05:42

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonnon615

2021/07/10 06:15

かなり初歩的なミスでした。 ありがとうございます. もう一個の質問の,初期値はどのように改良すればよいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問