出産前後の痔にはご注意!

プログラムで、振り子のヒモの長さ、重さ、角度を自由に設定し、振り子のアニメーションが表示されるようにしようと考えています。
普通の運動方程式での振り子の運動の表示はできたのですが、
オイラー法やルンゲクッタ法を使って導き出した振り子の動きも表示したいと考えています。
ところが、どうやってオイラー法を振り子の運動方程式に応用すれば、振り子のX、y座標が分かるのか?ということが、勉強不足でどうにもわかりません…

どなたか、ヒントだけでも教えていただけると幸いです。

A 回答 (2件)

 #1です。


 補足を拝見しました。

 運動方程式で、途中で速度をかませてよいのでしたら、オイラー法や修正オイラー法を使うことができます。この方法は、常に、速度⇒変位の順に解いていくものです。
http://www.asahi-net.or.jp/~hy9n-knk/eq_simu.htm

 そのほかに、邪道かもしれませんが、速度の計算を一度だけで省略する方法もなくはありません。
 2階微分方程式を差分方程式の形に直すと、初期変位として2点が必要になります。1点は問題自体に与えられているものを使いますが、2点目は、速度をかませて求めた変位を使います。あとは常に最初の2点が確保されますので、順に数値計算を進めていくことができます。

 なお、オイラー法を使う場合は、誤差がかなり大きくなってくるので注意してください。
http://maya.phys.kyushu-u.ac.jp/~knomura/educati …

 また、ルンゲ・クッタ法でも解くことができます。
 運動方程式に適用した例を掲載したサイトがありましたので紹介します。
http://www6.ocn.ne.jp/~simuphys/runge-kutta.html
    • good
    • 0
この回答へのお礼

丁寧な返答、どうもありがとうございました!
おかげさまで全部を使った表示をすることができました。大変助かりました。

お礼日時:2007/01/25 14:58

 オイラー法は、1階常微分方程式の数値計算方法なので、運動方程式には使えません。

無理に2階微分の項を作り出しても、初期値に2つの値が必要になり求められないことが分かるでしょう。
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4% …

この回答への補足

回答ありがとうございます。使えないんですか…!
どなたかがなさっていた、似たようなプログラムでは、オイラー法、修正オイラー法、ルンゲクッタ法で振り子を表示していたのでできるものなのだと思い込んでいました。
とすると2階微分方程式を解くことのできる、ルンゲクッタ法ならば描写が可能という事でしょうか…それとも他の方法があるのでしょうか。

補足日時:2007/01/24 19:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q漸化式を用いたπを求めるプログラム

下のプログラムの問題がわかりません。教えていただけませんか?

半径1の円に内接する正6・2^n角形の1辺の長さをa(n)とし 

a(n)+1=a(n)/√2+√4-a^2(n)
の式のπの近似値を計算するプログラムを作成しなさい。

 ※()の中は添え字です。
あと√2+√4-a^2(n)の文章は
√のなかに2+√4-a^2(n)の式が入ってる形です。

Aベストアンサー

Option Explicit On
Option Compare Binary
Option Strict On
Option Infer Off 'VB2008以上

Class Q4333288A
Shared Sub Main()
System.Console.WriteLine(CalculatePI(50).ToString())
System.Console.ReadKey(true)
End Sub

Shared Function CalculatePI(Precision As Integer) As Double
Dim pi As Double = SideLength(Precision) * 6 * Math.Pow(2,Precision) / 2
Return pi
End Function

'クラスに分割しようと思ったけど,関数名が思いつかないので放置
Shared Function SideLength(n As Integer) As Double
If n < 0 Then

Throw new System.ArgumentOutOfRangeException()

End If

If n = 0 Then
Return 1.0
End If

Dim temp As Double = SideLength(n-1)
Return temp / Math.Sqrt(2+Math.Sqrt(4-Math.Pow(temp,2)))

End Function

End Class

'a(n)+1=a(n)/√2+√4-a^2(n)
'これじゃ式が全然通じないよ
'a(n)+ 1 = ( a(n) / Math.Sqrt(2) )+ Math.Sqrt(4) - Math.Pow(a(n),2)
'とか
'a(n)+ 1 = a(n) / Math.Sqrt(2 + Math.Sqrt(4) - Math.Pow(a(n),2))
'って読んじゃった。
'せめて
'a(n+1)=a(n)/√(2+√(4-(a(n))^2))
'と書かないと。
'a(n+1) = a(n) / Math.Sqrt(2+Math.Sqrt(4-Math.Pow(a(n),2)))
'だともっと嬉しい。

'VBA/VB6だと後から言われても回答には戻ってこないつもり

'問1:この漸化式を導出せよ

'わざわざ面積を求めんでも。周囲の長さでいいじゃん

Option Explicit On
Option Compare Binary
Option Strict On
Option Infer Off 'VB2008以上

Class Q4333288A
Shared Sub Main()
System.Console.WriteLine(CalculatePI(50).ToString())
System.Console.ReadKey(true)
End Sub

Shared Function CalculatePI(Precision As Integer) As Double
Dim pi As Double = SideLength(Precision) * 6 * Math.Pow(2,Precision) / 2
Return pi
End Function

'クラスに分割しようと思ったけど,関数名が思いつかないので放置
Shared Function SideLength(n...続きを読む

Q単振り子の運動方程式

重力加速度g、質量m、紐の長さl、空気抵抗無視。

単振り子の運動方程式はこうなりますよね。
mlθ"=-mgsinθ
これがよくわからないのです。
どういう座標系についての運動方程式なのですか?

軌道にそってx軸を定めると
θl=x
mx"=-mgsinθ  軌道に沿った運動方程式?
⇔mlθ"=-mgsinθ  どういう座標系の運動方程式なの?
そしてこれの一般解はどういう風になりますか?
初期条件としてt=0でθ=φとします。

Aベストアンサー

まず座標系についてのお話をします。下の図をご覧下さい。

  y
  ↑
  ・→x
   \
   →\
   θ \
      ●

振子の支点を・、先端に吊るされたおもりを●で表しています。支点の位置をxy座標の原点に取るならば、鉛直からの振れ角をθとして
x= l sinθ  (1)
y= -l cosθ  (2)
であることは既にご承知かと思います。
このように置くこと自体が、(x, y)の直交座標系から(l, θ)の極座標系に移行していることに相当します。ただほとんど自明なことなので「極座標に置き換えて」などとわざわざ断っていないわけです。
極座標系に移行したことで問題の本質はx(t), y(t)の代わりにl(t), θ(t)を求めることに帰着します。大抵の場合はひもは伸び縮みしないと仮定しますのでlについて解く必要はなく、θについてのみ解くことになります。その方程式が
ml(d^2θ/dt^2)= -mg sinθ  (3)
なわけです。

しかしこの方程式は初等関数の範囲では解くことが出来ません。そこで初等物理の範囲ではθが小さい場合に限って問題を考えることにし、
sinθ≒θ  (4)
の近似を行って解きます。このとき(3)は
ml(d^2θ/dt^2) = -mg θ  (5)
となります。これの解き方はいろいろあります。線形微分方程式の理論を知っていれば解は直ちに
θ= C sin{√(g/l) t+α} ←Cは定数  (6)
だと分かります。αはC sinα=φを満たす定数です。
2階の微分方程式ですが初期条件が「t=0でθ=φ」の一つしか与えられていないので、定数が一つ未定のまま残ります(*1)。

愚直に微分方程式を解くのであれば下のようにやります。
l(d^2θ/dt^2)(dθ/dt) = -g θ(dθ/dt)
d/dt {(dθ/dt)^2} = -(g/l) d/dt (θ^2) ←両辺に(dθ/dt)をかけた上で、積の導関数の公式((y^2)'=2y y')を逆に使った
(dθ/dt)^2 = -(g/l) θ^2 +C1 ←C1は積分定数
dθ/dt = √{-(g/l) θ^2 +C1}  (7)
ここでθ=√(l/g)√C1 sinψと変数を変換すると
dθ/dt = √C1√(1-sin^2 ψ)  (8)
を経て
√(l/g)√C1 cosψ dψ = √C1 cosψ dt  (9)
と変形でき、両辺を積分することで
√(l/g) ψ= t+C2 ←C2は積分定数  (10)
を得ます。θの表式に戻すと
θ=√(l/g)√C1 sin{√(l/g) (t+C2)}  (11)
となります。これは本質的に(6)と同じ式です。初期条件「t=0でθ=φ」を代入することで
φ=√(l/g)√C1 sin{√(l/g)C2}  (12)
を得ます。これを使うと(11)からC1, C2のいずれかを消去できます。初期条件がもう一つあれば運動は一意に定まります(脚注参照)。

もちろん、「軌道に沿ってx軸を定める」でも解けます。この場合の運動方程式は
m(d^2 x/dt^2)= -mg sin(x/l)  (13)
となります。本質的に(3)と同じであることは申し上げるまでもなく、同様に解くことができます。

考え方は上記でよいはずですが中間で計算ミスがあるかも知れませんので、ONEONEさんご自身でも確認しながら読んで頂けると幸いです。

*1 もし初期条件が「t=0でθ=φまでおもりを持ち上げて手を放す」という意味であれば、「θの最大値はφ(厳密には|φ|)」という条件が新たに加わるので運動は一意に定まります。この場合はφsinα=φからα=π/2、よってθ=φsin{√(g/l) t+(π/2)}=φcos{√(g/l) t}と求めることができます。

まず座標系についてのお話をします。下の図をご覧下さい。

  y
  ↑
  ・→x
   \
   →\
   θ \
      ●

振子の支点を・、先端に吊るされたおもりを●で表しています。支点の位置をxy座標の原点に取るならば、鉛直からの振れ角をθとして
x= l sinθ  (1)
y= -l cosθ  (2)
であることは既にご承知かと思います。
このように置くこと自体が、(x, y)の直交座標系から(l, θ)の極座標系に移行していることに相当します。ただほとんど自明なことなので「極座標に置き換えて」...続きを読む

Q三角関数の記述の仕方

タイトルそのまんまなんですが、三角関数はC言語ではどのように記述すればいいでしょうか?
角度にラジアン表記でπ(パイ)を使いたいんですが、その表記方法もわかりません。
僕の持っている本に載ってなかったので質問させていただきました。
よろしくお願いします。

Aベストアンサー

C言語で三角関数を使うためには、math.h をインクルードする必要があります。使い方は例えば、こんな感じです。

#define M_PI 3.14159265358979 /* 円周率 */

double x, y, theta;

theta = M_PI / 4.0;
x = cos(theta); /* sin,cos,tanの引数は弧度法の角度です。*/
y = sin(theta);

πは上記の例のように自分で定義して使ってください。

QC言語で円周率を求めるプログラムを作りたいのですがわかりません。

C言語で円周率を求めるプログラムを作りたいのですがわかりません。
どなたか教えていただけないでしょうか。

Aベストアンサー

C言語と円周率をキーワードにして検索をかけると、参考になるサイトが検索できますよ。
以下のURLを参照してください。具体的な、コーディングの例ものっています。
http://www1.cts.ne.jp/~clab/hsample/Math/Math1.html
http://www.geocities.jp/kaname78web/pi.html
http://www.ss.cs.meiji.ac.jp/CCP051.html

Qe^(-x^2)の積分

e^(-x^2)の積分はどうやったらよいのでしょうか?
どなたか分かる方、よろしくお願いします。

eは自然対数の底でe^(-x^2)=exp{-x^2}

Aベストアンサー

ガウス分布に使いますね。
やりかたですね。一般的なものを参考程度までに、

xy座標の第一象限で原点を通る一辺aの正方形
と正方形に接する半径aの(1/4)円とr半径√2aを考えるんですね。
正方形の領域□でe^-x^2 をx方向に積分すると、
∫[0→a]e^-x^2dx
正方形の領域だからe^-y^2 をy方向に積分しても
同じ値になりますね。だから
∫[0→a]e^-x^2dx=∫[0→a]e^-y^2dy
ということは、x,yは独立に考えられるので、
∫[0→a]e^-(x^2+y^2)dxdy
={∫[0→a]e^-x^2dx}^2
という関係が出ますね。
だから、e^-(x^2)を積分する代わりにe^-(x^2+y^2)を積分してその√を取れば解が得られるという論法を利用するんですね。
四角形の領域で
I=∫[x,y:0→a]e^-(x^2+y^2)dxdy
を積分するにはちょっとなんで、四角形に接する大小の円で挟み撃ちを考えるんですね。
半径aの(1/4)円では、
極座標変換して、(x^2+y^2)=r^2, dxdy=rdrdθ
=∫[0→a]e^-(r^2)dr∫[0→π/2]dθ
=(1/2)(1-e^-a^2)(π/2)=(π/4)(1-e^-a^2)
同様に、半径√2aの(1/4)円では、
=(π/4){1-e^-(2a^2)}
だから、
x:0→a
√{(π/4)(1-e^-a^2)}<∫[0→a]e^-(x^2)dx
<√{(π/4){1-e^-(2a^2)}}
が回答ですね。これ以上は数値表を参照ですね。
a→∞ であれば、
∫[0→∞]e^-(x^2)dx=(√π)/2
が回答になりますね。
広域積分でも検索すれば参考になるかも。

ガウス分布に使いますね。
やりかたですね。一般的なものを参考程度までに、

xy座標の第一象限で原点を通る一辺aの正方形
と正方形に接する半径aの(1/4)円とr半径√2aを考えるんですね。
正方形の領域□でe^-x^2 をx方向に積分すると、
∫[0→a]e^-x^2dx
正方形の領域だからe^-y^2 をy方向に積分しても
同じ値になりますね。だから
∫[0→a]e^-x^2dx=∫[0→a]e^-y^2dy
ということは、x,yは独立に考えられるので、
∫[0→a]e^-(x^2+y^2)dxdy
={∫[0→a]e^-x^2dx}^2
という関係が出ますね。
...続きを読む

Qテキストファイルから文字列を読み込んで二次元配列に格納するには

毎回お世話になっています。

ただいまC言語を勉強中の学生です。

基本的な文法は頭に入れたつもりでしたが、まだポインタと ファイルの入出力に苦手意識があり 実際うまくできないでいるので

どなたか ご存知の方にアドバイスいただければと思って書き込ませていただきます。

今回練習しているのは 先に述べたように、テキストファイルに

abc
def
ghi
jkl

などと文字列を書いておき、そのファイルを読み込んで
二次元配列に格納したいのですが、何を勘違いしているのか、
うまく実現できません。

参考書などを見て 一次元配列へ格納する場合は できたようなのですが、今後このプログラムを発展させる段階で 二次元配列に文字列を
格納できたほうが好都合なので 今模索しています。。。

ちなみに 一次元配列に格納する場合は 以下のように書きました。


#include<stdio.h>
#include<stdlib.h>

main()
{
char a[10];

FILE *fp;

fp = fopen("word.dat", "r");

if (fp == NULL)
{
printf("File does not exist.\n");
exit(1);
}

while(fscanf(fp,"%s",a)==1){
printf("%s\n",a);
}

fclose(fp);

return 0;
}

実はコレに関しても分からない点があり、それは 目的の配列変数
a[]に格納できたのだから それを確認したいと思い
printfで a[0]~a[10]を表示してみようとしたところ 変に文字化け
したものが表示されたり、何も表示されなかったり よく分からないことが起きます。私は何を勘違いしてしまっているのでしょうか(>_<)

長々と書いてしまいましたが、今回 御教授いただきたいのは

(1)、テキストファイルから 英字の文字列を読み込んで二次元配列に格納するために用いるのに 一番最適な関数はどれか(fscanfやfgetsなど) そして、その関数を使って 一番シンプルな記述をするにはどのように記述すればよいのか

(2)、上のようなプログラムの書き方で、配列aにテキストファイルから読み込んで格納できたようなのに、a[0]~a[10]をprintfしたときに
うまく中身が表示されないのはなぜか。

という点なのですが、(1)をとりあえず急いでおりますので、(2)はおまけ程度に考えていただければと思います。

なぜかファイルの入出力がいまだに把握できなくて苦手としておりますので、どうか よろしくお願いいたします。

毎回お世話になっています。

ただいまC言語を勉強中の学生です。

基本的な文法は頭に入れたつもりでしたが、まだポインタと ファイルの入出力に苦手意識があり 実際うまくできないでいるので

どなたか ご存知の方にアドバイスいただければと思って書き込ませていただきます。

今回練習しているのは 先に述べたように、テキストファイルに

abc
def
ghi
jkl

などと文字列を書いておき、そのファイルを読み込んで
二次元配列に格納したいのですが、何を勘違いしているのか、
うまく実現...続きを読む

Aベストアンサー

#include <stdio.h>
int
main(void)
{
char a[10][10];
int i, maxi;
FILE *fin;

if ((fin = fopen("test.dat", "r")) == NULL){
fprintf(stderr, "Can't open file\n");
}
for (i = 0; i<10; i++) {
if (fgets(a[i], 10, fin) == 0) {
maxi = i;
break;
}
}
for (i = 0; i < maxi; i++) {
printf("a[%d] = %s", i, a[i]);
}

fclose(fin);
return 0;
}

Qエンターキーを押すとOKボタンの処理をしてくれる

自分の作ったJFrameのアプリケーションで、処理をお願いするのに、いちいちOKボタンをクリックしていたんでは、大変面倒で困ってます。

普通のウインドウズのアプリケーションみたいに、OKボタンを一々クリックしなくても、エンターキーを押せば処理してくれるようにしたいのですが、Javaではできないのですか?

たしか、VBではできましたよね。

あと、欲をいうと、エスケープキーを押すと終了するようにもしたいです。

誰か知っている人がいたら、教えてください。よろしくお願いします。

Aベストアンサー

ベストな解答では無いかもしれませんけど。。。

ボタン「OK」に KeyListener を組み込めば可能かと。
それで、「OK」ボタンの actionPerformed() と同様の処理をkeyTyped() なり、keyReleased(),keyPressed() なりをオーバライドして書き込むか、actionPerformed() を呼び出せば良いかと。

Button button = new Button("OK");
button.addActionListener(this);
button.addKeyListener(this);

*******************************
方法1

public void actionPerformed(ActionEvent e) {
//何らかの処理
}

public void keyReleased(KeyEvent e) {
if(KeyEvent.VK_ENTER == e.getKeyCode()) {
//actionPerformed() と同様の処理
}
}

************************************
方法2

public void actionPerformed(ActionEvent e) {
// 何らかの処理
}

public void keyReleased(KeyEvent e) {
if(KeyEvent.VK_ENTER == e.getKeyCode()) {
ActionEvent ae = new ActionEvent(e.getComponent(),ActionEvent.ACTION_PERFORMED, "" ) ;
actionPerformed(ae) ;
}
}

*************************************
方法3

public void actionPerformed(ActionEvent e) {
hoo();
}

public void keyReleased(KeyEvent e) {
if(KeyEvent.VK_ENTER == e.getKeyCode()) {
hoo();
}
}

public void hoo() {
//何らかの処理
}

*********************************

エスケープキーで終了したいのでしたら。。。

public class Foo extends JFrame implements KeyListener {
public Foo() {
addKeyListener(this);
}
public void keyReleased(KeyEvent e) {
if(KeyEvent.VK_ESCAPE == e.getKeyCode()) {
System.exit(0);
}
}

で、良いかと。。。

ベストな解答では無いかもしれませんけど。。。

ボタン「OK」に KeyListener を組み込めば可能かと。
それで、「OK」ボタンの actionPerformed() と同様の処理をkeyTyped() なり、keyReleased(),keyPressed() なりをオーバライドして書き込むか、actionPerformed() を呼び出せば良いかと。

Button button = new Button("OK");
button.addActionListener(this);
button.addKeyListener(this);

*******************************
方法1

public void actionPerformed(ActionEvent e) {
//何らかの処...続きを読む

Q方程式を2分法を用いて解くプログラム

学校で出されたCプログラムの課題で、1問だけどうしても出来ない問題があるんです。
「方程式 f(x) = x2 - 2 = 0 を 2 分法を用いて解くプログラムを作成せよ。ここで、方程式 f(x) = x2 - 2 は関数として定義せよ。上位の方から 4 桁目まで正しい値が出たらループを止めるようにする。」
というものなのですが、この「2分法」というやり方もよく分かりません。
プログラムの作成方法と併せて教えて頂けると幸いです。

Aベストアンサー

こんな感じでしょうか?

#include <stdio.h>

/* 関数 f(x) */
double f(double x) {
 return x*x-2.0;
}

/* 二分法 初期値 x1<x2 と 誤差限界 eps を入力 */
double bisec(double x1, double x2, double eps) {
 double x;
 while (x2 - x1 >= eps) {
  x = (x1+x2)/2.0; /* 中点計算 */
  if (f(x1)*f(x) > 0.0) { /* 同符号か判定 */
   x1 = x;
  } else {
   x2 = x;
  }
 }
 return (x1+x2)/2.0;
}

int main(void) {
 double eps=0.00001;
 printf("%lf %lf\n",bisec(-2,0,eps), bisec(0,2,eps));

 return 0;
}

Q振り子運動における物体のt秒後の速さと位置について

図がなくわかりにくくて、申し訳ございません。
 支点から物体の重心までの距離をr、物体に働く重力加速度をg、鉛直線と糸のなす角度をθ、物体の速さをv、物体の接線方向に働く重力加速度aとすると
 a=gsinθ・・・(1)
 また、角速度をαとするとα=dθ/dt、角加速度をβとするとβ=dα/dt、β=d^2θ/dt^2となります。また、v=rα、a=rβと表せるので、(1)より
 rβ=gsinθ
 となります。ここで、β=d^2θ/dt^2より
 rd^2θ/dt^2=gsinθ となると思うのですが、ここから上手く展開できません。
 どなたか別の方法でも構いませんので、アドバイスよろしくお願い致します。

Aベストアンサー

ん!???
マルチポストですね。
同じの2つ質問すると、片っ方が、ここのスタッフに削除されちゃうんですよ。

私、せっかく書いたのが消されるのは嫌なので、こちらにも書いときます。


ーーーーーーーーーーーーーーーーーーー

まず、
振り子は、物体の位置と復元力とは逆方向
つまり、a と θ は逆方向ですので
a=-gsinθ
です。


θが小さいとき、
sinθ ≒ θ
という近似が成り立ちます。(ただし、θの単位はラジアン)

つまり、
a = -gθ
です。

物体の変位xは、(位置は)θに糸の長さrを掛けて
x=rθ

です。
加速度aはxを時間tで2回微分したものなので、
a = rdθ^2/dt^2 = -gθ

ここで、θはtの三角関数であることが既知であれば
θ=sin(ωt+C)
(ωは、角速度です。)
1回微分 dθ/dt = ω・cos(ωt+C)
2回微分 dθ^2/dt^2 = -ω^2・sin(ωt+C)

上述の通り
a = rdθ^2/dt^2 = -gθ
ですので

a = -r・ω^2・sin(ωt+C)=-gsin(ωt+C)

よって
rω^2 = g
となります。

ここまで来れば、大丈夫なのでは。



なお、複素数の指数関数を知っていれば
sin(ωt+C)より、e^i(ωt+C)
のほうが楽なんですけどね・・・

ん!???
マルチポストですね。
同じの2つ質問すると、片っ方が、ここのスタッフに削除されちゃうんですよ。

私、せっかく書いたのが消されるのは嫌なので、こちらにも書いときます。


ーーーーーーーーーーーーーーーーーーー

まず、
振り子は、物体の位置と復元力とは逆方向
つまり、a と θ は逆方向ですので
a=-gsinθ
です。


θが小さいとき、
sinθ ≒ θ
という近似が成り立ちます。(ただし、θの単位はラジアン)

つまり、
a = -gθ
です。

物体の変位xは、(位置は)θに...続きを読む

Qがあるのにsqrtが・・・

最初にあるプログラムを作っていたのですが、その祭sqrtでエラーが出てしまったので、別にsqrtを使う短いプログラムを作りました。それが以下のものになります。(test3.c)

#include<stdio.h>
#include<math.h>

int main(void){
int atai;
double x=2.0;
atai=(int)sqrt(x);
printf("atai is %c",atai);
}


sqrtが動作するか確かめる為のものです。このプログラム(test3.c)で以下のエラーが出てしまいました。

/tmp/ccqEejZ1.o(.text+0x4d): In function `main':
test3.c: undefined reference to `sqrt'
collect2: ld はステータス 1 で終了しました

ちなみにLinux(Fedora core 4)を使用しています。
初心者ということもありなぜエラーが出るのか分かりません。
ちなみに<math.h>を使用しないプログラムは普通に動作します。
解決方法をご存知の方がいらっしゃいましたらご教授下さいませ。
よろしくお願いします。

最初にあるプログラムを作っていたのですが、その祭sqrtでエラーが出てしまったので、別にsqrtを使う短いプログラムを作りました。それが以下のものになります。(test3.c)

#include<stdio.h>
#include<math.h>

int main(void){
int atai;
double x=2.0;
atai=(int)sqrt(x);
printf("atai is %c",atai);
}


sqrtが動作するか確かめる為のものです。このプログラム(test3.c)で以下のエラーが出てしまいました。

/tmp/ccqEejZ1.o(.text+0x4d): In function `main':
test3.c: undefined r...続きを読む

Aベストアンサー

コンパイルのオプションつけてないとかないですよね?
たとえばTerminalとかだとコンパイル時に 『-lm』とかつけますが


おすすめ情報