20210927
Powershellで、カレンダーから選択した範囲内の日付を表示
20210518
おれのjavaが動かなかった
これを読んでハローワールドしたかった(できなかった)
JDKインストールして、
環境変数指定して、
コード書いて、 javacでコンパイルして(クラスファイル作って)、 javaで実行→エラーでできなかった。
原因と思われるエラー
おれのエラー
Exception in thread “main” java.lang.UnsupportedClassVersionError: hello : Unsupported major.minor version 60.0
こういうエラーは、javacとjavaのバージョンが違ったときに出るらしい。
実際下記のようにバージョンを確かめるコマンドを打つと、javacとjavaのバージョンが違った。
>javac -version
javac 16.0.1>java -version
java version “1.6.0_26”
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
16と1.6だそうです。違いますね。
さっき手動でインストールした(解凍したファイルを移動しただけ)〜\jdk-16.0.1\binには、16.0.1.0が入っている。
だから、16が正だ。
1.6 はどこから出てきたの?
原因の発見
コマンドラインで、where javaしたら原因が見つかった。
whereについてはこのサイト。
下記のように、コマンドラインでjavaっていったら、2つあるらしい。
>where java
C:\Windows\System32\java.exe
C:\pg\jdk-16.0.1\bin\java.exe
多分上の方を優先して使ってるんだと思う。
javacは一つみたい。
>where javac
C:\pg\jdk-16.0.1\bin\javac.exe
入れた覚えないんだけどな?
なんか変な依存関係があって、ある日突然正常に動かなくなったら嫌だな。
対処
とりあえず、環境変数の
%JAVA_HOME%\binを
%SystemRoot%\system32よりも上に持ってきた。
上に書いてあるほど、前に書いてあって、優先されるようです。
下記のように、コマンドラインでjavaと入力したら、16が使えるようになった!
>where java
C:\pg\jdk-16.0.1\bin\java.exe
C:\Windows\System32\java.exe>java -version
openjdk version “16.0.1” 2021-04-20
OpenJDK Runtime Environment (build 16.0.1+9-24)
OpenJDK 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
…Androidアプリを作りたくて、Android Studioの勉強の前に、JDKでお勉強してるんだが…
JDKを導入して、環境変数変えたけど…
Android Studioのjava.exeとか、javac.exeとかに影響しないのかな…
java.exeも、javac.exeもどうやら、C:\Program Files\Android\Android Studio\jre\binに入っているらしいので、androis studioはそれを使っているんだろうか?
android studioは、コマンドラインでjavaと打って起動するjava(system32に入っているやつとか)を使ってないのかな?。そもそもsystem32にはいつ何で入ってたんだろう?
Hello worldできた。
>java hello
Hello.
20201229
LTSpiceの素子の値を経時変化 三角波も作った。
抵抗値Rの経時変化
電気回路シミュレーターのLTSpiceを使って、時間が経つと電気抵抗が上がったり下がったりする素子を作りたい。
操作すると抵抗値が変化する可変抵抗とかではない。
時間が変数となって、値が上がり下がりする抵抗値を入れたかったのだ。
時間が経つにつれて上がる抵抗は、
抵抗Rを、変数(時間time)を使って式で表す。
valueに
R=10000-100*time
と入力すれば、10kohmから、1秒ごとに100ohm減っていく抵抗を表現できる。
R=を忘れたら動かなかった気がする。
R=10000+100*time
と入力すれば、10kohmから、1秒ごとに100ohm増えていく抵抗を表現。
静電容量Cの経時変化
さっきのコンデンサ版。
こちらもやはり、LTSpiceを使って、時間が経つと静電容量が上がったり下がったりする素子を作りたい。
時間が変数となって、値が上がり下がりする静電容量を入れたかったのだ。
なぜかCを直接入力できず、電荷量で指定することになる。
時間が経つにつれて上がるコンデンサ(キャパシタ)は、 電荷量Qを、変数(電圧xと時間time)で表すことになる。
電圧xを入れないと、静電容量っぽい振舞ではなくなる。
Q=CV
普通の1uFのコンデンサを作りたければ
Q=1u*x
xの所には電圧が入るので、入れ忘れてはいけない。
Q=静電容量*xと書く感じ。
Q=1u*x+1n*time*x
一秒あたり1 nFずつ容量が増えていく。
Q=CV
図では2 Vを印加しているので、一秒ごとに2nクーロン電荷が多くたまるようになるから、実質2 nAの電流が流れる感じになっている。
三角波を式で書く
三角波についてはPWLを使うのがお約束らしいが、だめだ。
GUIを使って値を指定するのが気に入らない。(大変。)
式を使って書く。(こっちの方が大変だった…)
結論を先に書くと、
componetから電圧源を選択するとき、bvを使用して(voltageではだめ)、
V=(abs(int(time)-time+1/2)-0.25)*4
と書くと、三角波になる。
入力した式の意味
式を作る作戦
int(time)として階段関数を作る。
そこに-timeして鋸歯状波を作る(-側にオフセットがかかっている。)
- +1/4して(オフセットを引いて)0を中心とした鋸歯状はを作る。
- 絶対値をとると、三角波ができる(+側にオフセットがかかっている。波高は0.25)
- *4して波高を調節。
手順1~2を図にすると、
手順3~4を図にすると、
最後の2枚の図は、pythonで書いてみた。
一応コードを載せておく。
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,4,1001)
y1= x.astype(np.int32)
y2=x
y3=y1-y2
f,(ax1,ax2,ax3) = plt.subplots(3,1)
ax1.axhline(y=0, xmin=-10, xmax=10, c="k")
ax2.axhline(y=0, xmin=-10, xmax=10, c="k")
ax3.axhline(y=0, xmin=-10, xmax=10, c="k")
ax1.plot(x, y1)
ax2.plot(x, y2)
ax3.plot(x, y3)
ax1.set_ylim(-4,4)
ax2.set_ylim(-4,4)
ax3.set_ylim(-4,4)
plt.show()
f,((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2)
y4=y3
y5=y3+0.5
y6=np.abs(y3)
y7=np.abs(y5)
ax1.axhline(y=0, xmin=-10, xmax=10, c="k")
ax2.axhline(y=0, xmin=-10, xmax=10, c="k")
ax3.axhline(y=0, xmin=-10, xmax=10, c="k")
ax4.axhline(y=0, xmin=-10, xmax=10, c="k")
ax1.plot(x, y4)
ax2.plot(x, y5)
ax3.plot(x, y6)
ax4.plot(x, y7)
ax1.set_ylim(-4,4)
ax2.set_ylim(-4,4)
ax3.set_ylim(-4,4)
ax4.set_ylim(-4,4)
plt.show()
LTSpiceを使って矩形波などを書く方法については、以前書いていた。(2016年!4年も前からマイナー記事を書き続けている。)
今年は新型コロナ一色の年だったが、私生活的には意外といい年だったと思う。