1

フェニクスの非線形問題を解こうとしています。非線形関数を式として知る代わりに、データの形での値しか知りません。

言い換えれば、nabla(k(u).nabla(u)) = C を解いている場合、k(u) がわからないか、x[0] などで記述できない場合、対応する値しかわかりません。 u のすべての値に対して k。

現時点では、いくつかの補間関数を作成し、それを関数空間に射影できる 'k' に呼び出しましたが、それを変分形式に入れて解決すると機能しないようです。

以下は、問題を明確にするためのコードです。テストとして、u=x^2 で k=1+u^2 の製造ソリューションの方法を使用していました。ここで、k_data = u=[0,(1+xmax のデータのリスト) ^2)]。

Expression でサブクラスを調べることができると言われましたが、x[0] に関して知らずにこれを行う方法がわかりません。助けてください!

u = Function(V)
v = TestFunction(V)

u.interpolate(Expression("x[0]"))
k = interpolate_table(u,kappa_data)
plot(project(k,V))

C = Expression("-2.0-10.0*x[0]*x[0]*x[0]*x[0]")
diff_part = k*inner(grad(u),grad(v))*dx
source_part = C*v*dx

Res = diff_part - source_part
J = derivative(Res,u)
problem = NonlinearVariationalProblem(Res, u, bcs, J)
solver  = NonlinearVariationalSolver(problem)
solver.solve()

prm = solver.parameters['newton_solver']
prm['relative_tolerance'] = 1E-6
prm['absolute_tolerance'] = 1E-6
prm['maximum_iterations'] = 100
4

0 に答える 0