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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Mathematica

Mathematicaは、ウルフラム・リサーチによって開発されている数式処理システムです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

5回答

5044閲覧

y=(X^2+3X+1)^4を「微分の定義」を使わないで傾きを求めるアルゴリズムについて。

John-Doe.7

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Mathematica

Mathematicaは、ウルフラム・リサーチによって開発されている数式処理システムです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

5クリップ

投稿2018/08/28 08:02

編集2018/08/28 15:31

私自身でも今現在進行形で方法を考えて三角関数とかでなんとかなるんじゃないかと考えているんですが、もしよろしければ付き合っていただけないでしょうか?
ほんの気になったことなのですが、y=(X^2+3X+1)^4を微分の定義とかを使わないで傾きを求められないかと考えています。もちろん、微分って傾き求めるもんなんだから定義を使わないなら求まるわけねーじゃんって思う方もいると思いますが、自分なりに探求しています。
もし、こんな方法もあるよって方がいらっしゃいましたら教えていただけると嬉しいです。
同時進行ではありますが、y=(X^2+3X+1)^4の傾きを微分の定義を使わないで解くアルゴリズムをプログラムにできないかとも考えています。

編集<8/29>※プログラミングとは関係ない、ただの数学の問題なのであまりよくないかもです。
すいません。勉強していけばいくほどわからなくなってきたことがあるのですが、
ここで質問してもいいですか?
微分の勉強中に、例えばy=X^3+3X^2+1となったとします。
この式を微分するとy'=3X^2+6Xとなります。
そこで質問です。二次関数y'=3X^2+6Xに接線引いた場合、その接線はある座標Aにおける傾きを表しているのでしょうか?
そしてグラフy=X^3+3X^2+1に関して、座標Aにおいてグラフy=X^3+3X^2+1に接線を引いた場合、その接線の傾きは二次関数y'=3X^2+6Xに座標Aで接線を引いた場合に得られる傾きと等しいものなのでしょうか?
わっかりにくくて申し訳ないです。どうも微分には悩んでしまいます。

また、y=ax^3+bx^2+3を微分してy’=3ax^2+2bxを得たとします。
y’=3ax^2+2bxに座標Bに関して接線を引いた場合、その接線は何を表すのでしょうか?
プログラミングと関係ないですが、お答えしていただけると勉強になります。

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

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

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

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

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

otn

2018/08/28 08:17

傾きの極限値を使わない傾きとは何?あなたの言う「微分の定義」とは?もしかして「導関数を使わないで」ということ?
John-Doe.7

2018/08/28 14:30

はい、そうです、導関数を使わないで求められるかと言いたかったです。
Chironian

2018/08/28 15:00

回答依頼を頂きましたが、私が知っている範囲では微分を使うのが最も簡単確実なので、それ以外の方法を把握していません。
John-Doe.7

2018/08/28 15:09

そうでしたか、いやいやどうもありがとうございます!
退会済みユーザー

退会済みユーザー

2018/08/29 01:09

微分を使わずに求める方法はあります。私の回答をご覧ください。
退会済みユーザー

退会済みユーザー

2018/09/01 02:35

で、私の回答の方は理解できましたか?微分という概念を使わずに求める方法でソースコードの方も短い方だと思います。せっかく知恵を絞って書いたので理解できたなら解決済み、わからないところがあれば質問してくださると助かります。
John-Doe.7

2018/09/01 18:02

まさか、微分を使わずにできるとは思っていませんでした。Stars1024さんのような方に会えて良かったです。はい、私事で申し訳ないのですが、少し忙しくしておりまして今気づきました。早速読ませていただきます。どうもありがとうございます。
guest

回答5

0

後半を見た感じでは、微分を理解できていないようなので、プログラムを書く前に、数学の先生に質問するとか、良い参考書を探すとかした方が良いと思います。

エッセンスだけ書いておきます。

f(x)が微分可能な関数であるという前提で、f(x)の導関数をf'(x)と書くと、
y=f(x)のグラフの、点(x0, f(x0))における接線の傾きは、f'(x0)です。

ここから微分と導関数の定義。

xの区間[x0, x0+h]を考えると、線分(x0,f(x0))-(x0+h,f(x0+h))の傾きは、(f(x0+h)-f(x0))÷h になりますが、これのh→0の時の極限値がx0における微分係数です。
xからその点での微分係数への関数が、導関数です。

投稿2018/08/29 01:04

otn

総合スコア84557

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

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

John-Doe.7

2018/09/04 17:07

お礼のお返事が遅れて申し訳ありません。 こんなに高評価が付いていると質問した価値があったと同時にotnさんのような方に回答していただけてよかったと感じました。(私の質問に高評価はついていませんが...。)
guest

0

ベストアンサー

まずは、追記であった質問の回答から

微分の勉強中に、例えばy=X^3+3X^2+1となったとします。
この式を微分するとy'=3X^2+6Xとなります。
そこで質問です。二次関数y'=3X^2+6Xに接線引いた場合、その接線はある座標Aにおける傾きを表しているのでしょうか?

まぁ、そうなりますね。正しくは「二次関数y'=3X^2+6Xの点Aにおける接線の傾き」です。ただ、その接線の傾きが知りたければy'=3X^2+6Xをもう一度微分して座標Aの
x座標を代入する必要があります。

また、y=ax^3+bx^2+3を微分してy’=3ax^2+2bxを得たとします。
y’=3ax^2+2bxに座標Bに関して接線を引いた場合、その接線は何を表すのでしょうか?

これは2回微分ですね。2回微分は「接線の傾きの微分。接線の傾きの変化率」を表しています。

関数の極大極小を議論するときに、y'=0となるところでyが極値で
あることをいいますが、y'=0だけでは接線の傾きが0であることを
いうだけで、極大か極小かはわかりません。

そこで、2回微分を取ってみると、微分係数が0になったときプラスから0に下がったのか、
マイナスから0に上がったのかがわかります。

たとえばy=x^2はx = 0のとき y' = 0、y''=2>0
これよりyのx=0における接線の傾きはx=0に向かって増加しながら
傾き0となりその後は傾きはプラスに転じます。

また、グラフを描くとき上に凸か、下に凸なのかを調べるためにf''(x)の正負を判別します。

はい、本題に行きます。

微分という概念を使わずに微分係数を求める方法について説明します。
具体的に説明したいので、f(x) = (x ^ 2 + 3x + 1) ^ 4の 点(-1,1)における微分係数を求めたいと思います。

イメージ説明

要するに、重要なのはx = -1において重解を持つことです。重解といってもf(x)は8次式なので
2重解なのか4重解なのかはわかりませんが、少なくとも2重解を持つことは明らかです。
組み立て除法を2回行えば必ずaが求まります。(1回では求まりません)

要するに重要なのは「関数f(x)とその接線によってつくられた方程式は重解を持つ」です。


さぁ、コードに落とし込もう

まず、図の青で囲んだところですが組み立て乗法の1回目では余りは0になります。
前述のようにaを求めるためには組み立て除法を2回行う必要があります。
コードに書く内容は実際に行う組み立て除法です。

#include <stdio.h> #include <stdlib.h> #include <math.h> #define BUFSIZE 256 int main(void) { char buf[BUFSIZE]; double x1; int i,j; int a; double data[8] = {1,12,58,144,195,144,58,12}; printf("通る点のx座標を入力してください。"); fgets(buf,BUFSIZE,stdin); x1 = strtod(buf,NULL); for(i = 0; i < 2; i++){ for(j = 1; j < 8; j++){ data[j] += data[j - 1] * x1; } } printf("微分係数:%f \n",data[7]); printf("--確認用--\n"); printf("実際に微分すると微分係数:%f",4 * pow((x1 * x1 + 3 * x1 + 1),3) * (2 * x1 + 3)); return 0; }

整数を入力するようにしていますが、小数の時も求めたければ、適宜ソースを変更してください。
イメージ説明

投稿2018/08/29 01:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

John-Doe.7

2018/09/01 18:05

どうもありがとうございます。 せっかく考えていただいた知恵を必ず理解できるようにします。今しばらくお待ちを。
退会済みユーザー

退会済みユーザー

2018/09/02 03:05

忙しいところ催促してしまいすみません。 なにか、不明な点がありましたら、遠慮なく連絡ください。
John-Doe.7

2018/09/02 15:45 編集

いえいえ、どうもありいがとうございます。 ちなみに今回のような方法であれば、微分をしないで微分係数を求められるのでしょうか? また、変数を含んだy=(X^2+3X+1)^4の微分y'=2X+3*3(X^2+3X+1)を今回のように微分無しで違う解き方で導くことは可能ですか?
退会済みユーザー

退会済みユーザー

2018/09/03 03:45

回答を見ればわかるように微分は一切しておりません。コードに書いてある微分した式は確認用で 一応書いただけです。 >変数を含んだy=(X^2+3X+1)^4の微分y'=2X+3*3(X^2+3X+1)を今回のように微分無しで違う解き方で導くことは可能ですか? 別解が欲しいという意味でしょうか?
John-Doe.7

2018/09/03 09:14

わがままを言ってしまい申し訳ありません。 はい、別解があるならば是非、教えて欲しいです。
退会済みユーザー

退会済みユーザー

2018/09/04 08:07

もう一度言います。 「なにか、不明な点がありましたら、遠慮なく連絡ください。」 あなたのコメントにある「ちなみに今回のような方法であれば、微分をしないで微分係数を求められるのでしょうか?」と「別解があるならば是非、教えて欲しいです。」をみるかぎり、 私には遠回しに 「この回答は理解できないから別の回答が欲しい」と聞こえます。 ていうか、回答を見れば「ちなみに今回のような方法であれば、微分をしないで微分係数を求められるのでしょうか?」に対する答えは明らかにYesです。 何か、「別解が欲しい」特別な事情があるならそれを明らかにしてほしいです。 そうでないならば、この回答を理解するようにしてください。 別に、この回答に対していくらでも質問してかまいません。 あなたが納得するまで答えますので。
退会済みユーザー

退会済みユーザー

2018/09/04 08:10

別解はないとは言い切れないので、一応考えておきます。
John-Doe.7

2018/09/04 17:04

ほんとにありがとうございます。 わたしももう一度要点をまとめて再度こちらで質問させていただきます。
fana

2018/09/05 07:09 編集

無い頭で考えたところ,以下のような話かと思うのですが,理解として合っておりますでしょうか. 式(3)(曲線y=f(x)と,(x1,f(x1))を通る直線とから作った式)を満たす(x,a)の組みは無限にあるけれども, aの値がx=x1における接線の傾きであるときに式(3)はx=x1を重解とするハズ →すなわち,式(3)を g(x)(x-x1)(x-x1) = 0 と書けるaの値が接線の傾きである →「g(x)(x-x1)(x-x1) = 0 と書けるaの値」とは,「x-x1で組立除法を2回やってみたときにあまりが0になるのようなaの値」ということ
退会済みユーザー

退会済みユーザー

2018/09/05 07:55 編集

@fanaさんへ まぁ、ざっくりいうとそういうことですね。ただ、aの値を求めるとき、組み立て除法を行う回数が 2回で十分な理由について 補足説明を入れると、 今回の場合,f(x)が8次式なので,式③が重解を持つとき、何重解なのかを考えると 2~8 の7通りが考えられます。(今回はあまり考えなくてもいいかもしれない) ただ、今回求めるのは変数aで、 変数a(接線の傾き)は「xの一次式の係数」となっているため、組み立て除法は2回で十分ということです。 変数aがxの何次式の係数かによって 組み立て除法を行う回数が変わるでしょう。 他にも、f(x)が (n次式) / (m次式)の場合だと、変数aは色んな所に係数として現れるため、 違う解法が必要になります。
swordone

2018/09/05 07:45

なぜ偶数重だけ? 3重、5重もあり得ると思うが。
退会済みユーザー

退会済みユーザー

2018/09/05 07:54 編集

あ、そうですね。共役な複素数についてばかり考えていて次の場合を忘れていました。 重解の個数が2つm,nで 例えば、(x - m)^3 * (x - n)^5などの場合を忘れていました。
fana

2018/09/05 08:19

ご教授いただき感謝致します.
guest

0

{目的,意図,etc}が良くわからない話ですが……
(別の質問のコメントを見るに,「微分するのが面倒だから数値微分で」的な話ではないのだと思われる)

(ネタっぽい話ですが)その曲線の絵を描いて画像処理的に求めるとか.
着目点付近の2次元空間を曲線が2分するとき,一方を黒,他方を白とした画像を描画すれば,Sobelフィルタみたいなので,着目点における輝度勾配方向として曲線の傾きを求められる.(精度とかは知らない)
(Sobelフィルタだって「微分」でしょ,とか言われるかな…)

投稿2018/08/28 11:02

編集2018/08/28 11:04
fana

総合スコア11658

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

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

John-Doe.7

2018/08/28 14:32

やはり賢い人に聞くと面白い探検ができます!! なるほど、面白い方法です! 実装できるかは別といて、考えてみたいですね、ぜひ! ありがとうございます。
fana

2018/08/29 00:58

小さなゲーム(のようなもの)を作ったときに使った方法です. キャラクターが移動できる箇所(通路)と通れないところ(壁)の間の境界が複雑な形(ペイントソフトで自由に手書きしたような)であるときに, キャラクターが壁に接触した箇所の,壁の法線方向を求める方法して.
fana

2018/08/29 04:42 編集

理屈に穴があるかもしれないけれども, 曲線上の点Aにおける法線を近似的に求める手続きを妄想してみました. 【初期処理】 点Pの位置を適当に決める(P==Aではないこと) 【探索処理】 以下を繰り返す. Pを中心とし弧がAを通る円を考え,この円と曲線との交点群を求める. * 交点が1点(すなわちA)しかない場合:終了 * 交点が3点以上ある場合,Pを適当にAに近づける.(例えば P = (A+P)/2 とか) * 交点が2点(Aと,もう一つの点B)の場合,  Pの位置を,Aを通り線分ABと垂直な直線上に移動させる.  移動先としては,AからPまでの距離が直前よりも小さくなるような位置を選ぶ.  (現実的には,AとBが「十分に近い」ならば1点だと見なして終了することになるか) 【解の決定】 上記の繰り返し処理を終了した時,A→P方向が,曲線の点Aにおける法線. (AとBの距離を近づけていった先の極限を目指すという操作だから,「微分の定義」そのものだなぁ…)
John-Doe.7

2018/09/01 18:22 編集

こんなにもユニークで価値のある考えと知恵がわかるなんて本当に貴重な時間を過ごさせていただいています。 ほんとうにありがとうございます。教えてくださった方法、コードにできるか心配ですが、ちょっと頑張ってみます。 できなかったらすいません...。 ほんと微分とか苦手な自分にとっては微分を使わなくても同等の結果や問題が解決できることがいいのですがね。(でも心のどこかではみんなと同じように微分を考えられないのが嫌になります。なんで微分が自分だけできないくて特別というか他の方法を使っている自分に対して疎外感を感じます。数学ってこんな悲しいものじゃないはずなのに、愚痴ってごめんなさい。個人的にはどんな方法であっても自分なりに納得して同じような答え(近似でもいい)が導ければいいかな、なんて甘いですが考えています。私もみなさまみたいにいろんな考えができたら数学がもっと楽しいのに、ひとつの方法にこだわるから辛くなるんでしょうね。少し視野を広くしないと。
fana

2018/09/02 01:00

>円と曲線との交点群を求める 多分コレとか,素直に微分するよりも大変なんですけどねw 他の方の回答からの引用になりますが, >xの区間[x0, x0+h]を考えると、線分(x0,f(x0))-(x0+h,f(x0+h))の傾きは、(f(x0+h)-f(x0))÷h になります なる話はOKでしょうか? (落ち着いて絵を描いてみれば,斜めの線の傾きは 縦/横 だと言っている程度の話ですよね) これがOKであれば,極限がどうのという話を真面目に取り合わずに,hを適当に小さい値にして勝手に計算してしまえばそれで近似完了ですよね.(数値微分)
John-Doe.7

2018/09/02 15:06

>xの区間[x0, x0+h]を考えると、線分(x0,f(x0))-(x0+h,f(x0+h))の傾きは、(f(x0+h)-f(x0))÷h になります なる話はOKでしょうか? はい、この程度ならば私でも理解できます。yの変化量/xの変化量なので。 なるほど、公式にとらわれて難しく考えすぎていたようです。もっと簡単に難しいことを解決できるようになればいいです。 どうもありがとうございます。
guest

0

編集<8/29>

に関して……

(微分可能な)曲線 y=f(x) の,x=a における傾きは f'(a) で,
イコール 曲線上の点(a,f(a))に接する接線の傾きになります.

同様に,yを微分したy'に関しても,
(微分可能な)曲線 y'=f'(x) の,x=a における傾きは f''(a) で,
イコール この曲線 y'=f'(x) 上の点(a,f'(a)) に接する接線の傾きになります.
これ( f''(a) )は,大元の曲線 y=f(x) の立場(?)から見ると,
「『曲線y=f(x) の x=a における傾き』の傾き」ということになりますね.
(大雑把に言うと,曲線y=f(x)の x=a における"曲がり具合"のようなもの.)

投稿2018/08/29 01:12

fana

総合スコア11658

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

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

fana

2018/08/29 01:14

グオオ… 書いてる最中にもっとまともな回答が…
John-Doe.7

2018/09/01 18:03

私のような者の回答に答えてくださりいつもありがとうございます。fanaさんの回答はユニークで面白いのでいつも楽しく読ませていただいています。
guest

0

傾きが求まったってことは微分が出来たってことと同値なんでは?

特定のXについてf(x)の傾きを計算するのは、プログラム言語的に可能ですが、数値計算誤差がどうしても入ります。

投稿2018/08/29 03:29

a_saitoh

総合スコア702

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問