わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

プログラミング課題,新作4つ(2/2)

 昨日の続きです.後半2題は,「ニュートン法」にしました.
 4つのうちの3番目は,「ニュートン法」の紹介です.C言語で学ぶニュートン法 - Qiitaを使用しました.f(x)とその導関数は,関数形式マクロではなくreturn文1つだけの関数で定義し,マクロEPSも除いて,1.0e-6を,while文の式に入れました.二分探索よりも収束が速いことは,ナレーションで言いました.近似解を求めるアルゴリズムであることは,言い忘れていました.
 4番目は,「円の3等分」です.元ネタは円3分割です.画像も,かなり流用しましたが,中央から切って3等分(https://kuragebunch.com/episode/13933686331658756380の途中で「ベンツマーク」と称した切り方)の図を,作っていなかったので,授業前日にconvertコマンドで作成しました.スライドはこんな感じです.

f:id:takehikom:20201225054954j:plain

 関連情報として次の2点を挙げました(拙ブログにはリンクしませんでした).

 使用する式は次の2つです.4番目のプログラムは「写経」ではなく,3番目のプログラムを修正することで完成させ,まずは2つの関数の書き換えを指示しました.

  • \displaystyle f(x)=\frac{1}{2}x+\frac{1}{4}\sin 2x-\frac{\pi}{12}
  • \displaystyle f'(x)=\frac{1}{2}+\frac{1}{2}\cos 2x

 またf(x)=0の解は角度なので,座標に変えることも,指示しました.単位円で考えると,分割のために縦に引いた線と円との交点は(0,-1)です.他について座標を求めて出力する,というプログラムです.
 授業中に,近い時間帯に2人の学生から質問がありました.一人はエラーが解消できず,もう一人は,出力がnanになるというのです.
 全員に見えるTeamsの投稿から,チャットに切り替えて,ソースコードを送ってもらうと,returnの直後に「(1 / 2)x」と書いていました.乗算記号は省略できない(数学のy=axC言語y = ax;は違う)ことと,1 / 2が「整数/整数」で整数(この場合は0)になることを伝え,修正を促しました.