C言語 3次関数 変曲点
Re: C言語 3次関数 変曲点
キマイラさん、
まず、左上の「フォーラムルールはこちら」を確認ください。赤いとこです。
次に、
1. 微分を用いないとなると、近似計算をさせたいのだと思いますが、求める精度や手法について、課題を出されたときに説明はありませんでしたか?
2. キマイラさんのC言語のスキルを教えてください。また習った文法や、使ってはいけないものなどがあれば教えてください。(使ってはいけないものがなければ数値計算ライブラリのようなものを探して使えばよいので)
3. 「変曲点」とは何か、「微分」という言葉を用いずに説明してください
まず、左上の「フォーラムルールはこちら」を確認ください。赤いとこです。
次に、
1. 微分を用いないとなると、近似計算をさせたいのだと思いますが、求める精度や手法について、課題を出されたときに説明はありませんでしたか?
2. キマイラさんのC言語のスキルを教えてください。また習った文法や、使ってはいけないものなどがあれば教えてください。(使ってはいけないものがなければ数値計算ライブラリのようなものを探して使えばよいので)
3. 「変曲点」とは何か、「微分」という言葉を用いずに説明してください
Re: C言語 3次関数 変曲点
いろいろ不足していました。
すみません
y=x3-3x2+4という式において、(変曲点が簡単なのでこの式で)
3次曲線上の任意の点をA(x,y)、変曲点の座標をB(p,q)とすると、
点Aの点Bに関する対称点C(r,s)は、
r=2p-x
s=2q-y
したがって、
2q-y=(2p-x)³-3(2p-x)²+4
2(p³-3p²+4)-(x³-3x²+4)=(2p-x)³-3(2p-x)²+4
これから、(p-1)(p²-2xp+x²)=0
p=1
代入してq=2
よって変曲点は(1,2)といった感じです。
私のC言語のスキルはほとんど初心者です。
習った文法はif文、for文、while文、配列くらいです。
できればこれらの文法でお願いしたいです。
すみません
y=x3-3x2+4という式において、(変曲点が簡単なのでこの式で)
3次曲線上の任意の点をA(x,y)、変曲点の座標をB(p,q)とすると、
点Aの点Bに関する対称点C(r,s)は、
r=2p-x
s=2q-y
したがって、
2q-y=(2p-x)³-3(2p-x)²+4
2(p³-3p²+4)-(x³-3x²+4)=(2p-x)³-3(2p-x)²+4
これから、(p-1)(p²-2xp+x²)=0
p=1
代入してq=2
よって変曲点は(1,2)といった感じです。
私のC言語のスキルはほとんど初心者です。
習った文法はif文、for文、while文、配列くらいです。
できればこれらの文法でお願いしたいです。
Re: C言語 3次関数 変曲点
キマイラさん、
まだ課題のシバリが見えないというか、
式が決まっていて、変曲点を「出力せよ」というだけなら、
極端な話、手計算で計算して、「printf("1,2");」でよくなってしまいます。(ある意味、高速化の一般的な手法です。答えが決まっているなら固定値で持たせるという。)
もちろんそんな課題ではないと思うので、例えば「係数はプログラムが起動してから入力する」だとか、課題自体にもっと条件があるのではと思うのですが。。。
まだ課題のシバリが見えないというか、
式が決まっていて、変曲点を「出力せよ」というだけなら、
極端な話、手計算で計算して、「printf("1,2");」でよくなってしまいます。(ある意味、高速化の一般的な手法です。答えが決まっているなら固定値で持たせるという。)
もちろんそんな課題ではないと思うので、例えば「係数はプログラムが起動してから入力する」だとか、課題自体にもっと条件があるのではと思うのですが。。。
Re: C言語 3次関数 変曲点
与えられた式の変曲点をプログラム内で計算して
実行結果としてだすといった感じです。
実行結果は
「y=x3-3x2+4の変曲点を計算します。
変曲点は(1,2)です」
のようになればいいのてすが…
実行結果としてだすといった感じです。
実行結果は
「y=x3-3x2+4の変曲点を計算します。
変曲点は(1,2)です」
のようになればいいのてすが…
Re: C言語 3次関数 変曲点
単に
>y=4x^3+5x^2+6x+7
という 特定の式 についてのみ答えを出せばいいのか,
それとも
例えばプログラム実行時に,
y = ax^3 + bx^2 + cx + d
の係数{a,b,c,d}を入力したら,それに見合った答えを出す
という話なのか?
というようなことが問われているのだと思いますが,
それに対して その答え方だと どうにもどちらなのかはっきりしません.
前者ですか? 後者ですか? (それとも全く別?)
わざわざ謎の条件が付けられている時点で何かの課題なのだと思いますが,
だったら,課題の問題文があればそれを丸々書いてもらった方が課題内容が伝わるのではないでしょうか.
>y=4x^3+5x^2+6x+7
という 特定の式 についてのみ答えを出せばいいのか,
それとも
例えばプログラム実行時に,
y = ax^3 + bx^2 + cx + d
の係数{a,b,c,d}を入力したら,それに見合った答えを出す
という話なのか?
というようなことが問われているのだと思いますが,
それに対して その答え方だと どうにもどちらなのかはっきりしません.
前者ですか? 後者ですか? (それとも全く別?)
わざわざ謎の条件が付けられている時点で何かの課題なのだと思いますが,
だったら,課題の問題文があればそれを丸々書いてもらった方が課題内容が伝わるのではないでしょうか.
Re: C言語 3次関数 変曲点
で,おそらく後者なのだろうと思いますが,
>対象点...
という話は
y = f(x) = ax^3 + bx^2 + cx + d
の変曲点のx座標がpだとすると,何か適当なx座標 x0 に対して,
2f(p) = f(2p-x0) + f(x0)
が成り立つ.
これを展開して p についての関数 g(p)=0 の形にする→これを解けば変曲点が求まる
ということだと思います.
(x0の値が何でもよいなら,x0=0 としてしまえば楽なのか?)
プログラムとしては
g(p)=0 を解くコードを書けば良いのではないでしょうか.
>対象点...
という話は
y = f(x) = ax^3 + bx^2 + cx + d
の変曲点のx座標がpだとすると,何か適当なx座標 x0 に対して,
2f(p) = f(2p-x0) + f(x0)
が成り立つ.
これを展開して p についての関数 g(p)=0 の形にする→これを解けば変曲点が求まる
ということだと思います.
(x0の値が何でもよいなら,x0=0 としてしまえば楽なのか?)
プログラムとしては
g(p)=0 を解くコードを書けば良いのではないでしょうか.
Re: C言語 3次関数 変曲点
キマイラさん、
「与えられた式の変曲点をプログラム内で計算」ということなら、
「どうやって与えられるか」が課題で示されているはずです。それを確認してください。
また、「微分は使ってはならない」のなら、どこまで使ってよいのでしょうか?
例えば、公式「変曲点P=(-b/(3a)、F(-b/(3a)))」は使ってよいのでしょうか?
(「これは微分がないと証明できないから使ってはならない」、ということなら、
上の手計算で前提にされている、「変曲点に対して点対象」というのも、たしか微分がないと証明できないので使ってはならない可能性があります。)
使ってよい、ということなら-b/(3a)を計算するだけなのでとっても簡単です。
(初心者向けの課題とのことなのでもうコレな気がしてきたのですが...)
課題の一部に「この知識は使ってはダメ」とあるので、「じゃあその知識に『関連する』知識はどこまでセーフなの?」というのが明確でないのです。
「与えられた式の変曲点をプログラム内で計算」ということなら、
「どうやって与えられるか」が課題で示されているはずです。それを確認してください。
また、「微分は使ってはならない」のなら、どこまで使ってよいのでしょうか?
例えば、公式「変曲点P=(-b/(3a)、F(-b/(3a)))」は使ってよいのでしょうか?
(「これは微分がないと証明できないから使ってはならない」、ということなら、
上の手計算で前提にされている、「変曲点に対して点対象」というのも、たしか微分がないと証明できないので使ってはならない可能性があります。)
使ってよい、ということなら-b/(3a)を計算するだけなのでとっても簡単です。
(初心者向けの課題とのことなのでもうコレな気がしてきたのですが...)
課題の一部に「この知識は使ってはダメ」とあるので、「じゃあその知識に『関連する』知識はどこまでセーフなの?」というのが明確でないのです。
Re: C言語 3次関数 変曲点
ookamiさん、usaoさん、
式はすでに与えられています。
書き方が分かれば数字を変えるだけなのでとりあえず
変曲点が簡単なy=x3-3x2+4での書き方を教えてください。
問題のまんまの式をかいてこれをみられたらまずいので…
また、変曲点の一般式にいれて解くのもだめです。
変曲点の性質を用いて解くよう指示を受けました。
>y = f(x) = ax^3 + bx^2 + cx + d
>の変曲点のx座標がpだとすると,何か適当なx座標 x0 に対して,
>2f(p) = f(2p-x0) + f(x0)
>が成り立つ.
>これを展開して p についての関数 g(p)=0 の形にする→これを解けば変曲点が求まる
ということでしたがこの式に当てはめても答えがでてきませんでした。
お手数をおかけして申し訳ないです。
式はすでに与えられています。
書き方が分かれば数字を変えるだけなのでとりあえず
変曲点が簡単なy=x3-3x2+4での書き方を教えてください。
問題のまんまの式をかいてこれをみられたらまずいので…
また、変曲点の一般式にいれて解くのもだめです。
変曲点の性質を用いて解くよう指示を受けました。
>y = f(x) = ax^3 + bx^2 + cx + d
>の変曲点のx座標がpだとすると,何か適当なx座標 x0 に対して,
>2f(p) = f(2p-x0) + f(x0)
>が成り立つ.
>これを展開して p についての関数 g(p)=0 の形にする→これを解けば変曲点が求まる
ということでしたがこの式に当てはめても答えがでてきませんでした。
お手数をおかけして申し訳ないです。
Re: C言語 3次関数 変曲点
キマイラさん、
公式は禁止でしたか...orz
そもそもなんですが、
「変曲点の性質を用いて解くように」とのことですが、
そもそも変曲点の定義は「二階微分がゼロになる点」なので、「変曲点の性質を用いる」というのは必ずどこかで微分を用いているわけです。
なので、
「変曲点の一般式にいれて解くのはだめ」、
「g(p)=0 ~ この式に当てはめても答えがでてきません」
となると、変曲点を求める方法がないのではないかと思うのですが。。。 本当に課題に他の情報がないのでしょうか?
一般式なら「直接的には微分を使っていないので課題的にはセーフなのかな」と思ったのですが...
念のため:イジワルしているわけではなくて、そのシバリでは本当にプログラムできないんじゃないかと思っています。
(もしかして微小な区分で傾きを走査する?とも思いましたが、それも考え方は微分ですし... むしろ誤差も出るし、初心者向けの課題でそれもない気がして。)
また、「式はすでに与えられています。」とのことですが、プログラムは「すでに与えられている式」というモノを勝手には解釈してくれません。「y=x^3-3x^2+4」というのは、人間は式として認識できますが、プログラムから見れば文字列であって、「式」ではないのです。
なので、必ず「どうやって、何が、何の型で」与えられるかが分からないとプログラムできません。
「標準入力から、係数が、文字列で」与えられるのでしょうか?というかそれがあいまいなら課題の出し方がおかしいと思います。
公式は禁止でしたか...orz
そもそもなんですが、
「変曲点の性質を用いて解くように」とのことですが、
そもそも変曲点の定義は「二階微分がゼロになる点」なので、「変曲点の性質を用いる」というのは必ずどこかで微分を用いているわけです。
なので、
「変曲点の一般式にいれて解くのはだめ」、
「g(p)=0 ~ この式に当てはめても答えがでてきません」
となると、変曲点を求める方法がないのではないかと思うのですが。。。 本当に課題に他の情報がないのでしょうか?
一般式なら「直接的には微分を使っていないので課題的にはセーフなのかな」と思ったのですが...
念のため:イジワルしているわけではなくて、そのシバリでは本当にプログラムできないんじゃないかと思っています。
(もしかして微小な区分で傾きを走査する?とも思いましたが、それも考え方は微分ですし... むしろ誤差も出るし、初心者向けの課題でそれもない気がして。)
また、「式はすでに与えられています。」とのことですが、プログラムは「すでに与えられている式」というモノを勝手には解釈してくれません。「y=x^3-3x^2+4」というのは、人間は式として認識できますが、プログラムから見れば文字列であって、「式」ではないのです。
なので、必ず「どうやって、何が、何の型で」与えられるかが分からないとプログラムできません。
「標準入力から、係数が、文字列で」与えられるのでしょうか?というかそれがあいまいなら課題の出し方がおかしいと思います。
Re: C言語 3次関数 変曲点
質問者様のこれまでの説明からだけでは
正直,出題者がどういう方法での開放解法を求めているのかが
我々の側(私だけ?)には不明です.
>g(p)=0
ではない
>変曲点の性質
って具体的にどんなことを指すのでしょう?
先にも書きましたが,何らかの課題の文面などを提示できないのでしょうか?
あるいは どんな{分野,授業,講義,…}の課題なのか? とかいう背景的なヒントとか…
>(もしかして微小な区分で傾きを走査する?とも思いましたが、それも考え方は微分ですし...
微分を使ってはいけないという条件というのは,解析的な導関数を用いるな,という意味なのかと思うので,
数値微分とかを行う分には良いんじゃないかなぁ? さすがに…
正直,出題者がどういう方法での開放解法を求めているのかが
我々の側(私だけ?)には不明です.
>g(p)=0
ではない
>変曲点の性質
って具体的にどんなことを指すのでしょう?
先にも書きましたが,何らかの課題の文面などを提示できないのでしょうか?
あるいは どんな{分野,授業,講義,…}の課題なのか? とかいう背景的なヒントとか…
>(もしかして微小な区分で傾きを走査する?とも思いましたが、それも考え方は微分ですし...
微分を使ってはいけないという条件というのは,解析的な導関数を用いるな,という意味なのかと思うので,
数値微分とかを行う分には良いんじゃないかなぁ? さすがに…
オフトピック
y = f(x) = ax^3 + bx^2 + cx + d
に対して,逆関数
x = F(y)
を考えたときに,yに対するxが3つあるようなyの範囲内において,
三つのxの値{x1,x2,x3}が等間隔に並ぶようなyを見つければいい…とか?
私は数学ダメなので,そんなことがどうやればできるのかわかりませんし,
結局 g(p)=0 と同じことを言ってるだけなのかもしれませんけど.
に対して,逆関数
x = F(y)
を考えたときに,yに対するxが3つあるようなyの範囲内において,
三つのxの値{x1,x2,x3}が等間隔に並ぶようなyを見つければいい…とか?
私は数学ダメなので,そんなことがどうやればできるのかわかりませんし,
結局 g(p)=0 と同じことを言ってるだけなのかもしれませんけど.
Re: C言語 3次関数 変曲点
オフトピック
あー,もう,あれだ.
みたいなグリッド上の5点 { P[1]=(X[1],Y[1]), P[2]=(X[2],Y[2]),...,P[5]=(略) } を考えて,
これらの点の座標を, どれかの点の座標(例えばP[3])と格子の縦横サイズW,H の4つのパラメタで表して,
与えられた数式 y = f(x) に対して この点群を当てはめる(P[3]が変曲点に,その他の点も y=f(x)上に乗るようにする)ための
最小二乗評価関数を
Σ_i{ ( Y - f(X) )^2 }
とした最小化問題にでもすればどうですかね.
で,これを解く際に f(x)の微分を用いないタイプの数値計算方法 を使えば良い,と.
(パラメタ初期値の問題がある&得られる答えは近似値だけど.)
これらの点の座標を, どれかの点の座標(例えばP[3])と格子の縦横サイズW,H の4つのパラメタで表して,
与えられた数式 y = f(x) に対して この点群を当てはめる(P[3]が変曲点に,その他の点も y=f(x)上に乗るようにする)ための
最小二乗評価関数を
Σ_i{ ( Y - f(X) )^2 }
とした最小化問題にでもすればどうですかね.
で,これを解く際に f(x)の微分を用いないタイプの数値計算方法 を使えば良い,と.
(パラメタ初期値の問題がある&得られる答えは近似値だけど.)
Re: C言語 3次関数 変曲点
フィルタ越しに出題者の意図を予想してみました。
グラフが上に凸か下に凸かを調べてはどうでしょう。
切り替わるところが変曲点なので、十分広い範囲から初めて、
2分探索でx座標を求めます。
任意の(x, f(x))について、どっちに凸かは、
f(x-δ)とf(x+δ)の平均とf(x)を比較することで判定します。
グラフが上に凸か下に凸かを調べてはどうでしょう。
切り替わるところが変曲点なので、十分広い範囲から初めて、
2分探索でx座標を求めます。
任意の(x, f(x))について、どっちに凸かは、
f(x-δ)とf(x+δ)の平均とf(x)を比較することで判定します。