中学2年生のみなさんへ。〈3/3〉数列「2022年共通テスト数学ⅡB第4問(1)(2)配点20点」sympyでア~セ、コード22行で。


(2022-02-11)〈1/3〉が長文になったので、分割しました。

sympyのわかる方へ

sympyのpiecewiseを使えば,3行で計算できると思いましたが、できませんでした。
教えて下さい。

Pycharmで:「一定の手順に従って数学的に処理する(問題作成方針 )」に違反しているコード

以下がポイントでした。
自転車が歩行者に追いつく地点を,A点(xA,yA)としています。
(youtube「福田の共通テスト直前演習です。2021年共通テストの問題4」より)

コード22行より短くなる方法を教えてください。

(2022-02-11)

from sympy import *
a,b = Function('a'),Function('b')
n   = symbols('n',integer=True)
var('xA yA t')
a1,b1={a(1):2},{b(1):2}
print("#ア  ",
    solve([Eq(yA-  0 ,1*(xA-  0) ),Eq(yA-0,2*(xA-  2 ))],[xA,yA])[xA])
ans=solve([Eq(yA-b(n),1*(xA-a(n))),Eq(yA-0,2*(xA-a(n)))],[xA,yA])
t=ans[xA]-a(n)
fa=a(n)+  t+1+  (b(n)+b(n))/2+  1
fb=b(n)+1*t+0+1*(b(n)+b(n))/2+1*1
bn=powsimp((rsolve(b(n+1)-fb                ,b(n),b1)))
an=powsimp((rsolve(a(n+1)-fa.subs({b(n):bn}),a(n),a1)))
print("#イウ ",an.subs({n:2}),",",bn.subs({n:2}) )
print("#エオ ",ans[xA]       ,",",ans[yA]       ," "* 6,",3 an+bn,4 2bn")
print("#カキ ",fa," "* 9,",an1=an+カ*bn+キ-----①")
print("#ク  ",fb," "*16,",bn1=   3*bn+ク-----②")
print("#ケ  ",bn," "* 6,",bn=5/2*3**(n-1)  -1/2")
print("#コ  ",an," "* 2,",an=5/2*3**(n-1)+n-3/2")
m=int((solve(2*bn-300 <= 0,n).rhs))
print("#サ  ",m)
print("#シスセ",(an+bn).subs({n:m}))
#ア   4
#イウ  8 , 7
#エオ  a(n) + b(n) , 2*b(n)        ,3 an+bn,4 2bn
#カキ  a(n) + 2*b(n) + 2           ,an1=an+カ*bn+キ-----①
#ク   3*b(n) + 1                  ,bn1=   3*bn+ク-----②
#ケ   5*3**(n - 1)/2 - 1/2        ,bn=5/2*3**(n-1)  -1/2
#コ   5*3**(n - 1)/2 + n - 3/2    ,an=5/2*3**(n-1)+n-3/2
#サ   4
#シスセ 137

Pycharmで:「一定の手順に従って数学的に処理する(問題作成方針 )」に準拠しているコード

(途中)

参考

解説 < 共通テスト2022 数学ⅡB問題|共通テスト解答速報2022|予備校の東進

sympy.solvers.recurr.rsolve(f, y, init=None)

未定